我有一个由多个视图功能提供服务的模板。例如,read_posts() 视图返回所有带有 GET 的帖子,add_post() 视图添加带有 POST 的新帖子。
我可能在同一页面上有其他发布操作,需要更多查看功能。
现在,这些视图函数中的每一个都需要将不同的参数传递给模板。例如,每个表单可能需要传递不同的表单参数。
将多个参数从多个视图函数组织到单个模板的最佳实践是什么?
例如,posts.html 是我使用的模板:
<html>
<head>
<title>My Django Blog</title>
</head>
<body>
<form action="{% url 'blog:add_post' %}" method="post">
{% csrf_token %}
<p><input type="text" name="title" id="title" /></p>
<p><input type="textarea" name="text" id="text" /></p>
<input type="submit" value="Submit" />
</form>
{% for post in posts %}
<h1>{{ post.title }}</h1>
<h3>{{ post.pub_date }}</h3>
{{ post.text }}
{% endfor %}
</body>
</html>
以下是我使用的视图:
def display_posts(request):
#All posts
posts = Post.objects.all()
sorted_posts = posts.order_by('-pub_date')
context = { 'posts' : sorted_posts }
return render(request, 'blog/posts.html', context)
def add_post(request):
if request.method == 'POST':
form = PostForm(request.POST)
#return HttpResponse('Hello World')
if form.is_valid():
post = Post()
post.title = form.cleaned_data['title']
post.text = form.cleaned_data['text']
post.pub_date = datetime.now()
post.save()
return HttpResponseRedirect(reverse('blog:display_posts'))
else:
form = PostForm() # An unbound form
return render(request, "blog:display_posts")
如您所见display_posts()
,请求页面时默认 GET,并add_post()
在创建新帖子时处理 http POST。
每个函数都在处理页面的不同功能,它们需要将不同的上下文变量传递给模板。(注意我只使用了上下文display_posts
)
如何确保每个函数向页面发送不同的上下文,并在模板中正确组织它们?
当您在一个页面上处理多个表单时,您是否为它们使用部分模板并将它们包含在主页中?
谢谢。