Django - 诊断类和视图的问题

时间:2016-04-14 18:22:11

标签: django python-3.x django-forms django-templates

我正在尝试使用Django表单和模板将变量发送到html。

这是我的代码......

class AdminView(TemplateView):
template_name = 'admin.html'

def admin(self, request):
    template = 'admin.html'
    data = Quiz.objects.all()
    form = AdminForm(request.POST)
    context = {"form": form}
    context['admin'] = data
    # return render(request, template, context)
    return render_to_response(context)

这段代码有什么问题?怎么变量没有出现在网站上。

行上下文= {“form”,form}在我的IDE中被高亮显示为错误。

错误:此字典创建可以重写为字典文字。

这看起来如何?

class AdminView(TemplateView):
    template_name = 'admin.html'

def post(self, request):
    template = 'admin.html'
    data = Quiz.objects.all()
    form = AdminForm(request.POST)
    context = {"form": form}
    context['admin'] = data
    return render(request, template, context)

遗憾的是仍然不起作用?

这是html代码......

{% if request.user.is_authenticated%}
    {% if request.user.username  == "teacher"  %}
        <!DOCTYPE html>
        <html lang="en">
        <head>
            {% load staticfiles %}
            <meta charset="UTF-8">
            <title>Admin</title>
            <link rel="stylesheet" type="text/css" href="{% static 'style.css' %}" />
        </head>
        <body>
        {% include 'navbar.html' %}

        Admin Test

        {{ admin }}



        </body>
        </html>
    {% endif %}

2 个答案:

答案 0 :(得分:0)

这只是一个风格问题,与实际问题无关。

您的代码存在一些实际问题。首先,您不能只定义像admin这样的任意方法,并期望它被调用。您需要在此处定义getpost

第二个是render_to_response需要给出模板名称。您使用render注释掉的版本是正确的。

答案 1 :(得分:0)

注意标识,如果要向模板发送额外的上下文,可以使用get_context_data()方法,如下所示:

class AdminView(TemplateView):
    template_name = 'admin.html'

    '''
    This is for a GET request
    '''
    def get_context_data(self, **kwargs):
        context = super(AdminView, self).get_context_data(**kwargs)
        context['admin'] = Quiz.objects.all()
        context['form'] = AdminForm()
        return context

    '''
    This is for a POST request
    '''
    def post(self, request, *args, **kwargs):
        form = AdminForm(request.POST)
        if form.is_valid():
            # do something if form data is valid
        else:
            # do something if form data is not valid
        return render(request, 'admin.html', context)

但如果你想要一个表格,我建议你使用FormView而不是TemplateView