Ich habe ein Django 1.11-Projekt mit Viewflow - https://github.com/viewflow/viewflow - das ich eingefügt habe. Es war sehr hilfreich, aber viele Dinge sind irgendwie "magisch", und da ich mein erstes ernsthaftes Django-Projekt bin, stoße ich auf ein Problem, von dem ich nicht weiß, wie ich es lösen soll oder wie es am besten funktioniert.Django-Ansicht mit benutzerdefiniertem Kontext überschreiben (Django 1.11, Viewflow)
Ich habe eine generische Vorlage, die viel Kontext erwartet. Ich habe eine Funktion, die diesen Zusammenhang an alle meine Ansichten ergänzt:
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()
Ich muss im Grunde diesen Kontext zu einer Ansicht hinzufügen, die innerhalb viewflow ist - nämlich AssignTaskView - https://github.com/viewflow/viewflow/blob/f50accb3cde5d53f1d4db0debf5936867712c3bd/viewflow/flow/views/task.py#L109
Ich habe versucht, eine Einige Dinge, die man überschreiben/hinzufügen könnte, aber keine scheinen zu funktionieren.
Versuch 1: die URL überschreiben und verwenden extra_context (SO dies vorgeschlagen)
- Das Problem ist, dass die Urls "Magie" sind, ist mein urlpatterns sehr einfach:
from material.frontend import urls as frontend_urls
urlpatterns = [
url(r'^MOC/', include('MOC.urls')),
url(r'', include(frontend_urls)),
]
die Urls Überschreibung selbst war WAY über meinen Kopf, ich habe mich eine Weile damit beschäftigt, aber es benutzt wirklich generische Funktionen, um Module zu ziehen usw. Ich hatte keine Ahnung, wie ich es überhaupt versuchen sollte.
Versuch 2: Überschreibe die Ansicht selbst und die Funktion get_context_data
Ich glaube, das wäre möglich, aber es scheint einfach nicht zu funktionieren. Meine Versuche, sah wie folgt aus (die neuesten eins):
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
Dies ist in meinem views.py - aber es einfach nicht laufen. Ich verpasse wahrscheinlich etwas, aber ich kann nicht herausfinden, wie man es wirklich zwingt, meine Ansicht anstelle von dem zu verwenden, das in viewflow eingebaut wird.
Ich habe die Viewflow-Templates erfolgreich überschrieben, aber es ist mir nicht möglich, etwas anderes zu überschreiben. Irgendwelche Vorschläge?