Django Context未呈现

问题描述

我想渲染包含一些内容的视图。我不明白为什么不呈现上下文。 render_recall_details()函数会导致问题-> ctx不是None,在我看来,没有理由不将其呈现在html文件

views.py

class RecallDetail(View):
    template_name = "recall_detail.html"

    def get(self,request,*args,**kwargs):
        if request.GET:
            q = request.GET
            q = q.dict()
            recall = find_recall_by_querystring(q)
            if recall:
                self.render_recall_details(request,recall)
            else:
               return render(request,self.template_name) 
        return render(request,self.template_name)

    def render_recall_details(self,obj,**kwargs):
        ctx = {
            'head': 'Hallo','rec': RecallForm(),'docs': find_docs(obj),}
        print(ctx)
        return render(request,self.template_name,context=ctx)

forms.py

class RecallForm(forms.ModelForm):
    class Meta:
        model = Recall
        fields = ('Recall_CODE','Recall_NAME','Recall_DESCRIPTION','Recall_START_DATE','Recall_PLANNED_COMPLETATION_DATE','Recall_STATUS','Recall_DATE_COMPLETED')

我的html_template:

{% extends 'base.html' %}
{% block content %}
<div class="content-wrapper">
    <h1>{{ head }}</h1>
    ...
</div>
{% endblock content %}

解决方法

在您的代码库中似乎是一个错字。在Django中,每个视图 必须返回响应 。因此,就您而言,如果变量 recall 具有一定的价值,您将不会返回任何信息。因此,将您的视图更改为

class RecallDetail(View):
    template_name = "recall_detail.html"

    def get(self,request,*args,**kwargs):
        if request.GET:
            q = request.GET
            q = q.dict()
            recall = find_recall_by_querystring(q)
            if recall:
                # you need to put the `return` statement here
                return self.render_recall_details(request,recall)
            else:
               return render(request,self.template_name) 
        return render(request,self.template_name)

    def render_recall_details(self,obj,**kwargs):
        ctx = {
            'head': 'Hallo','rec': RecallForm(),'docs': find_docs(obj),}
        print(ctx)
        return render(request,self.template_name,context=ctx)