结合上下文和表单时,模板显示标记而不是页面

Posted

技术标签:

【中文标题】结合上下文和表单时,模板显示标记而不是页面【英文标题】:template shows markup and not the page when combining context and forms 【发布时间】:2020-12-11 23:30:03 【问题描述】:

我对 Django 还很陌生。我正在尝试在同一页面上显示字典和表单。但是,它只针对 html 标记而不是实际页面。这是我的代码:

home/views.py:

from django.shortcuts import render
from recruit.forms import RecruitForm


articles = [

    'author': 'Glenn',
    'title':'title 1',
    'content': 'first content',
    'date_posted': 'January 12'
,

    'author': 'batman',
    'title':'title 2',
    'content': 'second content',
    'date_posted': 'January 12'
,

    'author': 'batgirl',
    'title':'title 3',
    'content': ' Lorem ipsum dolor sit amet consectetur adipisicing elit. Voluptas ratione 
       eaque nam totam! Labore consectetur nostrum dicta magnam ex expedita facilis  
       illum odit quibusdam vitae?',
    'date_posted': 'January 12'

]

# Create your views here.
def index(request):
  form = RecruitForm()
  context = 
    'articles': articles

return render(request, 'home/index.html', context, 'form':form)

招聘/forms.py:

 from django import forms
 from phonenumber_field.modelfields import PhoneNumberField
 from .models import Recruit

 class RecruitForm(forms.ModelForm):
    email = forms.EmailField()
    phone = PhoneNumberField()

 class Meta:
    model = Recruit
    fields = ['firstname', 'lastname', 'email', 'phone', 'city', 'contact_preference']
    widgets = 'contact_preference': forms.Radioselect 

当我不传递上下文时,整个页面都会呈现。形式也是一样。我知道如何验证表格,我只是想让这个问题尽可能通用。所以要么我可以传递形式或上下文,但不能同时传递两者。当我通过两者时,我得到了我的 html 标记而不是文档。我所说的标记是指实际的 .html 标记,因此 ...感谢您提供任何帮助。

【问题讨论】:

【参考方案1】:

如果你将两个对象传递给模板,你会创建一个包含两个条目的字典,所以:

def index(request):
    form = RecruitForm()
    return render(request, 'home/index.html', 'form':form, 'articles': articles)

所以你没有传递两个字典。 render(…) function [Django-doc] 的第四个参数是content_type,不是一些额外的上下文。

【讨论】:

@WillemVanOnsem 谢谢你的作品。你回答得这么快,我还不能接受。时间一到我就会更新。再次感谢您。

以上是关于结合上下文和表单时,模板显示标记而不是页面的主要内容,如果未能解决你的问题,请参考以下文章

在 Django 中使用 HttpResponseRedirect 时如何传递模板上下文信息?

在每个页面上放置一个 django 登录表单

Flask 视图显示 400 错误而不是带有表单的模板

jquery-mobile.js这个做手机页面,怎么只让他中间组件可以上下拉动,而头部和底部组件,不动,一直显示

通过包含标记传递上下文变量

如何在路径中设置变量并在模板中显示?