Python 使用自定义上下文覆盖django视图(django 1.11,Viewflow)
我有一个使用Viewflow的Django 1.11项目——我已经合并了它。这是非常有帮助的,但是很多东西都有点“魔力”,作为我第一个认真的Django项目,我遇到了一个我不确定如何解决的问题,或者是最好的方法 我有一个需要大量上下文的通用模板。我有一个函数将此上下文添加到我的所有视图中:Python 使用自定义上下文覆盖django视图(django 1.11,Viewflow),python,django,django-1.11,django-viewflow,Python,Django,Django 1.11,Django Viewflow,我有一个使用Viewflow的Django 1.11项目——我已经合并了它。这是非常有帮助的,但是很多东西都有点“魔力”,作为我第一个认真的Django项目,我遇到了一个我不确定如何解决的问题,或者是最好的方法 我有一个需要大量上下文的通用模板。我有一个函数将此上下文添加到我的所有视图中: def add_general_context(context, MOC, MOC_enabled_fields = (), MOC_status = None): context['MOC'] = MO
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
我尝试了一些方法来覆盖/添加上下文,但似乎都不起作用
尝试1:覆盖URL并使用额外的上下文(建议这样做)-问题是URL是“神奇的”,我的URL模式非常简单:
from material.frontend import urls as frontend_urls
urlpatterns = [
url(r'^MOC/', include('MOC.urls')),
url(r'', include(frontend_urls)),
]
覆盖URL本身是我无法理解的,我研究了一段时间,但它使用真正通用的函数来拉入模块,等等。我甚至不知道如何真正尝试
尝试2:覆盖视图本身和获取上下文数据函数我认为这是可能的,但它似乎不起作用。我的尝试与此类似(最近一次): 这在my views.py中—但是,它根本不运行。我可能遗漏了一些东西,但我不知道如何实际强制它使用我的视图,而不是viewflow中内置的视图
我已经成功地覆盖了Viewflow的模板,没有任何问题,但是覆盖任何其他内容我都无能为力。有什么建议吗?是的,您实际上可以通过将视图url置于url\u模式之上来覆盖它
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)),
]
flows.py:
class MyFlow(Flow):
...
taskname = MyView(UpdateProcessView).next(this.end)
这就是您可以覆盖任何内置视图的方式
Viewflow旨在提供代码库中的所有旋钮。您可以通过子类化流或流节点类来自定义任何行为
自定义节点示例可能会有所帮助
from viewflow import flow
class MyView(flow.View):
assign_view_class = MyAssignTaskView
class MyFlow(Flow):
...
taskname = MyView(UpdateProcessView).next(this.end)