2

我是 Web 开发、Django、python、html 等方面的新手。我有一个基本的 Django 应用程序,它显示已输入数据库的出版物标题列表。这工作正常。

我现在想使每个出版物标题都是一个链接 - 当单击时 - 呈现另一个模板,其中包含所单击的出版物的详细信息。到目前为止,我知道如何获取发布链接以呈现模板,但我试图弄清楚如何将发布标题传递给超链接,以便在详细信息模板中呈现的数据将特定于标题被选中。

这是我的出版物模板中的内容,它显示了所有出版物(这是不正确的,但希望它澄清了我想要做的事情):

<html>
    <head><title>Publications</title></head>
    <body>
        <h1>Publications</h1>
        <ul>
            {% for publication in publication_list %}
            <li><strong><a href="/publications/{{publication.title}}/detail">{{ publication.title}}</strong></li></a>
            {% endfor %}
        </ul>
    </body>
</html>

为了上下文,处理此问题的 url 模式是:

url(r'^(?P<detail_type>\w+)/(?P<link_item>\w+)/detail$', get_details)

并且视图函数是: // 注意:我这里可能有一些逻辑/语法错误,但这是基本思想

def get_details(request, detail_type=None, link_item=None):
    if detail_type == "publications":
        publication = Publication.objects.filter(title__iexact=link_item)
        return render(request, 'publication_detail.html', {'detail_type' : detail_type, 'publication' : publication})
    elif ....

就像我说的,我是一个初学者,所以如果我以错误的方式处理这个问题,任何建议或资源都会受到赞赏。谢谢。

4

2 回答 2

0

这对我来说看起来很不错,尽管如果所有出版物标题都是唯一的并且您希望将一个实例而不是查询集(包含一个项目)传递到详细信息模板中,您可能希望在视图函数中使用get而不是。这会引发有 0 或 >1 个匹配的错误,但听起来这可能是您想要的行为filterPublication

但是,我不确定您在这里缺少什么。publication_detail.html看起来像什么?假设它们都包含在相关的 Publication 实例中,您应该在上面的代码中拥有呈现细节所需的一切。

于 2013-05-30T17:50:04.253 回答
0

如果您使用命名的 url 模式url,您可以使用模板标签轻松完成此操作。

网址.py

url(r'^(?P<detail_type>\w+)/(?P<link_item>\w+)/detail$', get_details, name='details')

模板

{% url 'details' 'publications' publication.title %}

我希望你也知道SlugField,url 比普通的要好得多CharField


替代:

网址.py

url(r'^(?P<detail_type>\w+)/(?P<pk>\w+)/detail$', get_details, name='details')

模板

{% url 'details' 'publications' publication.pk %}

视图.py

def get_details(request, detail_type=None, pk=None):
    if detail_type == "publications":
        publication = Publication.objects.get(pk=pk)
        return render(request, 'publication_detail.html', {'detail_type' : detail_type, 'publication' : publication})
    elif ....

这使用条目的主键而不是标题。如果你想有一个带有标题的 url,你需要SlugField在你的模型上添加和使用。

于 2013-05-30T17:54:10.427 回答