2017-11-01 2 views
1

통합 한 Viewflow - https://github.com/viewflow/viewflow을 사용하는 장고 1.11 프로젝트가 있습니다. 매우 도움이되었지만, 많은 것들이 "마법"의 일종이며, 처음으로 진고한 Django 프로젝트가되어서, 해결 방법이나 최선의 방법에 대한 확신이없는 문제가 발생했습니다.사용자 정의 컨텍스트로 장고보기 덮어 쓰기 (Django 1.11, Viewflow)

문맥이 많이 필요한 일반적인 템플릿이 있습니다. 나는 나의 모든보기에이 컨텍스트를 추가하는 기능을 가지고 :

def add_general_context(context, MOC, MOC_enabled_fields =(), MOC_status = None): 
    context['MOC'] = MOC 
    context['current_date'] = timezone.now().strftime("%D") 
    context['MOC_form'] = forms.MOCForm(prefix="MOC_form", MOC_enabled_fields=MOC_enabled_fields, instance=MOC) 
    context['MOCAttachments'] = models.MOCAttachment.objects.filter(MOC=MOC) 
    context['MOCAttachment_form'] = forms.MOCAttachmentForm(prefix="MOCAttachment_form") 
    context['MOCApprovals'] = models.MOCApproval.objects.filter(MOC=MOC) 
    context['MOCTasks'] = models.MOCTask.objects.filter(MOC=MOC) 
    context['MOC_status'] = MOC_status 
    context['MOCConversation'] = models.MOCConversation.objects.filter(MOC=MOC) 
    # Add comments to the conversation 
    for conversation in context['MOCConversation']: 
    conversation.comments = models.MOCComment.objects.filter(conversation=conversation) 
    context['MOCComment_form'] = forms.MOCCommentForm(MOC=MOC) 
    context['MOCCommentReply_form'] = forms.MOCCommentReplyForm() 
나는 기본적으로 viewflow 안에 볼이 컨텍스트를 추가 할 필요가

- 즉, AssignTaskView - 내가 해봤 https://github.com/viewflow/viewflow/blob/f50accb3cde5d53f1d4db0debf5936867712c3bd/viewflow/flow/views/task.py#L109

문맥에 덮어 쓰기/추가하는 것이 거의 없지만 아무 것도 작동하지 않는 것 같습니다.

시도 1 : URL을 덮어 쓰기 및 extra_context 사용
(SO이 제안) - 문제는 URL이 "마법"이라는 것이다, 내 urlpatterns은 매우 간단하다 :

from material.frontend import urls as frontend_urls 
urlpatterns = [ 
    url(r'^MOC/', include('MOC.urls')), 
    url(r'', include(frontend_urls)), 
] 

이 URL을 스스로 덮어 쓰기 나는 내 머리 위로 길을 가다가 잠시 동안 파고 들었다. 그러나 실제로 모듈을 잡아 당기기 위해 제네릭 함수를 사용한다. 나는 그것을 실제로 시도하는 방법을 알지 못했다.

시도 2 ​​:보기 자체 및 get_context_data 기능을 덮어 씁니다.
이것이 가능할 것이라고 생각하지만 작동하지 않는 것 같습니다. 내 시도는 이것 (가장 최근의 것)과 비슷하게 보입니다 :

from viewflow.flow.views.task import AssignTaskView as CoreAssignTaskView 

class AssignTaskView(CoreAssignTaskView): 
    def get_context_data(self, **kwargs): 
    context = super(AssignTaskView, self).get_context_data(**kwargs) 
    print("Did it work?") 
    return context 

이것은 내 views.py에 있습니다 - 그러나 단순히 실행되지 않습니다. 아마도 뭔가를 놓친 것 같아요. 실제로 강제로 사용하는 방법을 알아낼 수 없습니다. 보기 대신 viewflow에 내장 된보기.

Viewflow의 템플릿을 문제없이 덮어 쓰지 만, 다른 것을 덮어 쓰는 것은 저 밖에 있습니다. 어떤 제안?

답변

0

예를 실제로 url_patterns

urlpatterns = [ 
    url(
     r'^/workflow/appname/flowname/(?P<process_pk>\d+)/taskname/(?P<task_pk>\d+)/assign/$', 
     YouCustomView.as_view(), 
     {'flow_task': FlowClass.taskname}, 
     name="{}__assign".format(self.name))) 
    ), 
    url(r'', include(frontend_urls)), 
] 

의 상단에 넣어 뷰 URL을 재정의 할 수 있습니다하지만 그것은 단지 지정 flow.View 서브 클래스를 작성하는 간단하고 할당보기

https://github.com/viewflow/viewflow/blob/master/viewflow/flow/nodes.py#L306

자신의 설정
from viewflow import flow 

class MyView(flow.View): 
     assign_view_class = MyAssignTaskView 

flows.py :

class MyFlow(Flow): 
    ... 
    taskname = MyView(UpdateProcessView).next(this.end) 

이렇게하면 기본 제공보기를 재정의 할 수 있습니다.

Viewflow는 코드베이스 내의 모든 노브를 제공하도록 설계되었습니다. Flow 클래스 또는 Flow Node 클래스를 하위 클래스 화하여 모든 동작을 사용자 정의 할 수 있습니다.

사용자 정의 노드 예는 도움이 될 수

https://github.com/viewflow/viewflow/blob/master/demo/customnode/nodes.py