我希望能够在我的blog.html上访问post_list10
和photo_list
,但是我只能在这样写的时候访问它。有谁知道怎么写它所以我可以访问它们?
post_list10 = Post.objects.all().order_by("-date")[:10]
photo_list = Photo.objects.all()
urlpatterns = patterns('',
url(r'^$', ListView.as_view(
queryset=post_list10,
template_name="blog.html")),
# FOR SOME REASON WHICHEVER COMES FIRST TAKES PRECEDENT. Cannot do both.
url(r'^$', ListView.as_view(
queryset=photo_list,
template_name="blog.html")))
此外,
在我的blog.html中调用列表时,我可以使用
{% for post in object_list %}
.....
{% endfor %}
为了使用可用的帖子对象,但如果我可以同时访问帖子或照片,我怎么知道我是否正在使用帖子或照片?对不起,如果我的措辞不清楚,我对此很新。
答案 0 :(得分:3)
解决问题的方法通常包括编写自己的视图。 一种简单的方法如下:
在urls.py中:
from views import my_view
urlpatterns = patterns('',
url(r'^$', my_view, name="my_blog"),
)
在views.py中
from django.shortcuts import render
from django.http import HttpResponse
from django.template import RequestContext, loader
def my_view(request):
"""The view for your blog page"""
post_list10 = Post.objects.all().order_by("-date")[:10]
photo_list = Photo.objects.all()
template = loader.get_template('blog.html')
context = RequestContext(request,{
'post_list': post_list10,
'photo_list': photo_list,
})
return HttpResponse(template.render(context))
blog.html中的模板将更改为:
{% for post in post_list %}
.....
{% endfor %}
{% for photo in photo_list %}
.....
{% endfor %}
我注意到的另一件事就是这个评论"#对于之前的第一个原因而来的一些原因。不能两者兼顾。"。这确实是正确的,期望的行为。 URL匹配的工作方式是Django从URL模式的顶部开始,然后迭代。在请求中为URL找到的第一个正则表达式匹配是使用的匹配,不再进行进一步搜索。因为您只有^$
中的第一个匹配正则表达式urlpatterns
。每次有重复的正则表达式时都会发生这种情况,第二种情况永远不会被使用。
一般来说,Django documentation的质量非常高,如果你遇到困难,请阅读。