【问题标题】:How to automatically append slug to URL?如何自动将 slug 附加到 URL?
【发布时间】:2018-11-02 04:51:22
【问题描述】:

我目前正在学习 Django,想知道如何自动将 slug 附加到 url。

例如,我在这里发布的一个旧问题的完整网址是:

https://stackoverflow.com/questions/13263275/having-trouble-compiling-pysqlite-on-windows

但如果我输入:

https://stackoverflow.com/questions/13263275

在地址栏中,它会自动在 url 中附加 slug。

我如何在 Django 中做到这一点?

谢谢。

【问题讨论】:

  • 到目前为止你做了什么?你有 /questions/13263275/having-trouble-compiling-pysqlite-on-windows/questions/13263275 的 URL 模式吗?你写过任何一个的视图吗?你有带 slug 场的模型吗?
  • 我刚开始学习。我最近完成了 Django 教程和 Marina Mele 的教程。不,我还没有带有 slug 场的模型。添加 slug 字段可能不会成为问题(对吗?)。地址栏中的附加部分让我摸不着头脑。我尝试在谷歌搜索,但只是空手而归。
  • 希望添加 slug 字段不会太棘手,但这可能是必需的步骤。您可以使用reverseHttpResponseRedirect 进行重定向。然后,您可以使用redirect 快捷方式进一步简化代码。我问了所有这些问题,以鼓励您在答案中包含尽可能多的代码,以便我们可以准确地看到您遇到的问题,并希望您在实现此功能时能学到更多。
  • 嗨。我已将 slug 字段添加到我的一个模型中,并在我的 urls.py 中添加了必要的 url。但我想我知道如何根据您发布的内容和下面答案中的示例来执行此操作。一旦 url 与带有 id 的模式匹配,例如'/',然后我使用重定向将用户发送到带有附加 slug 的 url,例如'//'。我的理解正确吗?
  • 是的,听起来不错。

标签: django url slug


【解决方案1】:

您可以通过在问题的 URL 一个 pk 和另一个 slug 中获取 2 个参数并像这样处理。

urls.py

url(r'^(?P<pk>\d+)/$', views.questionDetail),
url(r'^(?P<pk>\d+)/(?P<slug>[\w.-]+)/$', views.questionDetail, name='question-detail'),

views.py

def questionDetail(request, pk, *args):
    question = get_object_or_404(Question, pk=pk) 
    slug = ""
    if(*args[0])
        slug = *args[0]

    if question.slug != slug:
        return redirect('question-detail', pk, question.slug)

    return render(request, 'questions/question_detail.html', context)

【讨论】:

  • 这会将/1/wrong-slug/ 重定向到/1/correct-slug/,但您还希望能够将/1/ 重定向到/1/correct-slug/
  • 嗨。谢谢你。当我回到工作岗位时,我会试一试,并会报告。我也会尝试用这段代码做一些实验。
  • 嗨。设法通过我自己的一些调整来解决这个问题。谢谢你们的帮助。
猜你喜欢
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
  • 2015-05-06
  • 1970-01-01
  • 2020-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多