У меня есть проект Django 1.11 с использованием Viewflow — https://github.com/viewflow/viewflow — который Я включил. Это было очень полезно, но многие вещи являются чем-то вроде «волшебства», и, поскольку это мой первый серьезный проект Django, я столкнулся с проблемой, которую не знаю, как решить или как лучше всего.
У меня есть общий шаблон, который ожидает много контекста. У меня есть функция, которая добавляет этот контекст ко всем моим представлениям:
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()
В основном мне нужно добавить этот контекст в представление, которое находится внутри потока просмотра, а именно, AssignTaskView - https://github.com/viewflow/viewflow/blob/f50accb3cde5d53f1d4db0debf5936867712c3bd/viewflow/flow/views/task.py#L109
Я пробовал несколько вещей, чтобы перезаписать/добавить в контекст, но ничего не работает.
Попытка 1: перезаписать URL-адрес и использовать дополнительный_контекст (SO предложил это)
. Проблема в том, что URL-адреса «магические», мои шаблоны URL-адресов очень просты:
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 без проблем, но перезаписать что-либо еще мне не под силу. Какие-либо предложения?