gpt4 book ai didi

django - 如何在 django url 中使用 slugs

转载 作者:行者123 更新时间:2023-12-04 03:10:22 32 4
gpt4 key购买 nike

一直害怕在这里问这个问题,刚从 Stack Overflow 开始,相信我,我已经尝试过搜索这个问题,但大多数情况下我看到了正则表达式模式。
请如果有人可以指导我解决这些问题:

  • 如何使用帖子名称自动填充我的博客模型 slug 字段,而无需自己填写。
  • 如何在 Django 2.x 中使用没有正则表达式的 slug 建立一个链接以转到单个帖子页面

  • 谢谢。

    最佳答案

    所以你还没有发布你的代码,但假设你的模型看起来像这样:

    class Post(models.Model):
    title = models.CharField(max_length=100)
    slug = models.SlugField(unique=True)
    content = models.TextField()
    并且您想预先填写 slug从标题中,您有几个选项,具体取决于您想在哪里做:
  • Post将仅由员工用户创建:在管理员中预先填充
  • Post将在管理员之外创建:覆盖 .save()方法

  • 从管理员
    在管理员中获取此信息的最简单方法是通过 prepopulated_fields
    @admin.register(Post)
    class PostAdmin(admin.ModelAdmin):
    prepopulated_fields = {'slug': ('title',)}
    Django 将自动更新 slug 字段 当您键入 创建帖子时的标题。非常好的用户体验,但仅限于管理员......
    管理员之外
    在前面的示例中,如果您要从控制台或其他页面创建帖子,最终可能会得到一个空 slug。在这种情况下,您可以通过覆盖模型的 .save() 来快速确保预填充 slug。方法,并调用 slugify 在里面:
    class Post(models.Model):
    title = models.CharField(max_length=100)
    slug = models.SlugField(unique=True)
    content = models.TextField()

    def save(self, *args, **kwargs):
    self.slug = self.slug or slugify(self.title)
    super().save(*args, **kwargs)
    链接 slug 发帖
    免责声明:如果您需要有关这部分的更多详细信息,我建议 part 3 of the official tutorial .
    如果您有 URL 路径:
    # urls.py
    from django.urls import path
    from your_blog import views

    urlpatterns = [
    path('posts/<slug:the_slug>/', views.post_detail_view, name='show_post'),
    ]
    然后,在您的 View 模块中,您有一个 View :
    # your_blog/views.py 
    from django.views.generic.detail import DetailView


    class PostDetailView(DetailView):
    model = Post
    # This file should exist somewhere to render your page
    template_name = 'your_blog/show_post.html'
    # Should match the value after ':' from url <slug:the_slug>
    slug_url_kwarg = 'the_slug'
    # Should match the name of the slug field on the model
    slug_field = 'slug' # DetailView's default value: optional

    post_detail_view = PostDetailView.as_view()
    您可以链接到 Post通过在 Python 中调用:
    reverse('show_post', args=[the_post.slug])
    或者在 Django 模板中:
    <a href="{% url 'show_post' the_post.slug %}">{{ the_post.title }}</a>
    编辑:发布索引页面
    然后,您可以添加一个索引页面,生成一个链接到您所有帖子的列表:
    # your_blog/views.py 
    from django.views.generic import ListView


    class PostListView(ListView):
    model = Post
    # This file should exist somewhere to render your page
    template_name = 'your_blog/list_post.html'
    在 View 模板中:
    <!-- your_blog/list_post.html -->
    <ul>
    {% for the_post in object_list %}
    <li>
    <a href="{% url 'show_post' the_post.slug %}">{{ the_post.title }}</a>
    </li>
    {% endfor %}
    </ul>
    希望有帮助:)

    关于django - 如何在 django url 中使用 slugs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53067186/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com