【问题标题】:Django - diagnose issue with Class and viewDjango - 用类和视图诊断问题
【发布时间】:2016-08-06 11:23:55
【问题描述】:

我正在尝试使用 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)

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

行 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 %}

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 好的,我在问题中添加了一些内容。看起来怎么样?它似乎仍然无法正常工作。
    【解决方案2】:

    注意标识,如果你想向模板发送额外的上下文,你可以使用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

    【讨论】:

    • 我认为你没有理解我的目标,我正在尝试将数据库中的数据显示到网站上。
    猜你喜欢
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多