【问题标题】:How to put the page title in a url pattern with Django?如何使用 Django 将页面标题放在 url 模式中?
【发布时间】:2020-08-22 21:59:15
【问题描述】:

如果我想将博文 id 发送到 url 模式,并让 url 自动变成 www.blog.com/post/2/this-is-my-second-blogpost 之类的东西,我该怎么做?

在 urls.py 内部,我有一个 url 模式,它接受博文 ID 及其标题。它似乎不起作用,一旦起作用,以这种方式为每个页面添加标题会很乏味。

urls.py:path('post/<int:post_id>/<str:post_title>', views.view_post, name='view_post'),

blogposts.html 模板: <a href="{% url 'blogs:view_post' post.id post.title%}">Read More</a>

views.py:def view_post(request, post_id, post_title):.

【问题讨论】:

  • 网址中不需要标题。目的是什么?
  • 所以如果链接是共享的,用户可以在点击之前阅读标题

标签: django url django-urls


【解决方案1】:

只需将post_title 的默认参数添加为None。如果您希望直接从post_id 获取post_title,请选择post_title,这样做不会给您带来错误,因为函数已经获得了所有满足的参数值。

所以:

def view_post(request, post_id, post_title=None):

编辑

好的,用户想要的是关于slug field。 Slug 字段是 django 模型中的字段类型。基本上,它用于 url 类型。在上述问题中,pyknight202 想要的是post_title 的 url 模式。因此,您不能直接将tilte 用作url,因为它们包含空格,因此您必须在连字符或下划线中添加post_title 才能阅读。因此,Post 模型中需要 slug 字段。

https://helloworld.com/1/this-is-example

所以,1 是 post_id,因为 slug 不能是唯一的,因此您不仅可以从 post_title 检索,因此您也需要 post_idRefs

【讨论】:

  • 是否可以只发送 id 并让 url 使用它来将 post_title 添加到末尾?
  • 一个模板将用户和 post_id 发送到一个新的 url 模式,该模式通过使用 id 获取 post 对象,将 post_title 连接到 url 的末尾
  • 是的,这绝对有可能......如果你可以从post_id 中检索post_title,那么你不必将它添加到参数......
  • 你能解释一下我如何在不向视图发送 post_title 的情况下做到这一点吗?我的尝试返回了view_post() got an unexpected keyword argument 'post_title'。似乎 post_title=None 会在 post_title 发送到视图后更改。
  • 好吧,我误解了你之前所说的......你想在最后添加标题网址,这是可能的,但你必须将它重定向到另一个类似的网址......我认为这不是一个好的解决方案.
【解决方案2】:

也许您应该为 url 使用 slug 字段而不是 id 和标题的组合,您的 url 看起来像 example.org/title-to-object-2/。 现在你有了一个独特的 slug 字段,其中包含标题和 id。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-07
    • 2012-05-06
    • 2018-06-25
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    相关资源
    最近更新 更多