【问题标题】:Django more than one ListView to an html pageDjango 多个 ListView 到一个 html 页面
【发布时间】:2015-01-24 01:14:22
【问题描述】:

我希望能够在我的 blog.html 上同时访问 post_list10photo_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 %}

为了使用可用的帖子对象,但如果我可以访问两者,我怎么知道我是否正在使用帖子或照片?对不起,如果我的措辞不清楚,我对此很陌生。

【问题讨论】:

  • 我想您需要编写自己的视图来执行此操作。然后从 URL 调用该视图。
  • 您能否详细说明一下或指出一个清晰的文档?我读过它们,但当时我并没有完全理解。

标签: html django listview web django-queryset


【解决方案1】:

解决问题的方法通常包括编写自己的视图。 一个简单的方法如下:

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

我注意到的另一件事是这条评论“# FOR Some Reason WHICHEVER FIRST TAKES PRECEDENT。不能两者都做。”。这确实是正确且理想的行为。 URL 匹配的工作方式是 Django 从 URL 模式的顶部开始,然后迭代。为请求中的 URL 找到的第一个正则表达式匹配是使用的匹配,并且不会进行进一步的搜索。因为你有相同的正则表达式^$,所以只有urlpatterns 中的第一个会被匹配。每当您有一个重复的正则表达式时,都会发生这种行为,而第二个则永远不会被使用。

一般来说Django documentation 的质量非常高,所以如果遇到困难请阅读。

【讨论】:

  • 非常感谢您的回答,它绝对帮助我使用我自己的示例更好地理解文档。我还有一个问题,如果可以的话。如果我有一个网站的不同部分包含不同的帖子,例如关于篮球的讨论和关于足球的讨论,如果我只想返回有关篮球的帖子或仅返回有关足球的帖子,是只制作特定的basketball_post 模型/football_post 模型的最简单方法吗?
  • @user3853339,很高兴这有帮助。一般来说,StackOverflow背后的想法是一次问一个问题,所以提出一个关于讨论主题过滤的新问题,我会去那里回答。此外,如果答案解决了您在本网站上的问题,您可能希望通过单击问题旁边的复选标记将答案标记为已接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-13
  • 2016-12-14
  • 2019-03-17
  • 1970-01-01
相关资源
最近更新 更多