【问题标题】:Query on generic display views - Django查询通用显示视图 - Django
【发布时间】:2017-08-30 20:38:22
【问题描述】:

对于blog应用程序的以下url路由,

from django.conf.urls import url, include
from django.views.generic import ListView, DetailView
from blog.models import Post

urlpatterns=[
    url(r'^$', ListView.as_view(
                    queryset=Post.objects.all().order_by("-date")[:25],
                    template_name="blog/blog.html",
                   )
            )
]

模板blog.html是,

{% extends "personal/header.html" %}

{% block content %}
    {%  for post in object_list %}
        <h5>{{post.date|date:"Y-m-d"}}<a href="/blog/{{post.id}}"> {{post.title}} </a></h5>
    {% endfor %}
{% endblock %}

blog 应用的模型定义为,

class Post(models.Model):
    title = models.CharField(max_length=140)
    body = models.TextField()
    date = models.DateTimeField()

    def __str__(self):
        return self.title

blog 应用的 MTV 结构为,

../blog
    admin.py
    apps.py
    __init__.py
    migrations
    models.py
    templates
    tests.py
    urls.py
    views.p

问题:

{{post.id}} 在内部创建为主键,用于表中的每一行,但是,

模板中的/blog/{{post.id}}是什么意思(blog.html)?

【问题讨论】:

  • 帖子详细信息的网址

标签: django django-models django-templates django-views


【解决方案1】:

当您想访问某个特定博客时,您需要有一个指向该博客的链接。这就是 /blog/{{post.id}} 作为链接的作用。

所以 /blog/1 为您提供了第一个博客。只是您必须为此定义 url 模式、视图和模板。

url(r'^(?P<id>[^/]+)/$', views.get_blog, name='one_blog'),

然后在视图中:

def get_blog(request, id):
    blog = Blogs.objects.get(id=id)
    return render(request, 'blogs/one_blog.html', locals())

然后在模板文件夹中,创建一个“blogs/one_blog.html”文件。最简单的例子是:

{% extends "personal/header.html" %}

{% block content %}
    <h5>{{blog.title}}</h5>
    {{blog.body}}
{% endblock %}

只要确保您了解模板的文件夹结构即可。

【讨论】:

    【解决方案2】:

    它只是一个前缀/prefix/id/。也可以/article/1...没关系

    urls.py

    urlPatterns=[
          url(r'^$', ListView.as_view(
                         model=Post,
                         template_name="blog/blog_list.html",
                       )
                )
          url(r'blog/(?P<pk>[\w-]+)/$', DetailView.as_view(
                         model=Post,
                         template_name="blog/blog_detail.html",
                      )
                )
    
    ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多