【问题标题】:Adding Category Path in Django Blog在 Django 博客中添加类别路径
【发布时间】:2016-04-12 12:00:51
【问题描述】:

我正在向我的网站添加一个博客,到目前为止一切都很成功。根据下面的代码 sn-ps,我有一个动态创建 url 和标签系统的 slug 字段。由于这些博客专门用于搜索引擎营销,因此我并不是在寻找任何超级疯狂的东西,但我错过了一件我需要帮助的重要事情。

目前,当我创建一个新博客时,路径是 www.mysite.com/blog/this-is-the-title-slug 但我真正需要做的是能够从管理仪表板创建添加类别然后会像 www.mysite.com/blog/mycategory/this-is-the-title-slug 一样插入到 URL 中。

这是我的一些代码:

我的网址:

from django.conf.urls import url
from . import views, feed

urlpatterns = [
    url(r'^$', views.BlogIndex.as_view(), name='post_list'),
    url(r'^(?P<slug>\S+)$', views.BlogDetail.as_view(), name="post_detail"),
    url(r'^feed/$', feed.LatestPosts(), name="feed"), name='post_edit'),
]

我的模型

from django.db import models
from django.core.urlresolvers import reverse
from django_markdown.models import MarkdownField


class EntryQuerySet(models.QuerySet):
    def published(self):
        return self.filter(publish=True)


class Tag(models.Model):
    slug = models.SlugField(max_length=200, unique=True)

    def __str__(self):
        return self.slug


class Entry(models.Model):
    title = models.CharField(max_length=200)
    body = MarkdownField()
    slug = models.SlugField(max_length=200, unique=True)
    publish = models.BooleanField(default=False)
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)

    objects = EntryQuerySet.as_manager()
    tags = models.ManyToManyField(Tag)

    def get_absolute_url(self):
        return reverse("post_detail", kwargs={"slug": self.slug})

    def __str__(self):
        return self.title

    class Meta:
        verbose_name = "Blog Entry"
        verbose_name_plural = "Blog Entries"
        ordering = ["-created"]

屏幕截图指出类别插入的位置

感谢您的帮助。新年快乐!!

【问题讨论】:

  • 您是否尝试过插入类别?
  • 我确实尝试插入与 slug 具有相同模式的模型名称,但遇到了错误。蛞蝓的事情很容易弄清楚,但我在创建动态网址时仍然有点迷失。

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


【解决方案1】:

您需要先为类别创建一个模型,例如:

class Category(models.Model):
    name = models.CharField(max_length=255, blank=False)
    slug = models.SlugField(max_length=100, blank=False)

    def __str__(self):
        return self.name

并将类别添加到您的 Entry 模型中:

class Entry(models.Model):
    title = models.CharField(max_length=200)
    ... < the rest of your model> 
    category = models.ForeignKey(Category)

现在,如果您想按类别过滤,请将其添加到您的 urls.py

url(r'^(?P<category>[^\.]+)/(?P<slug>[^\.]+)/$', 'yourview', name='post_detail'),

请记住修改您的视图以接受类别作为参数并过滤具有此类别的条目。

【讨论】:

  • 非常简单 - 谢谢!!并且只是为了增加您的回复以使其他人受益,我的视图链接变为

    {{ object.title } }

猜你喜欢
  • 1970-01-01
  • 2016-10-27
  • 1970-01-01
  • 1970-01-01
  • 2021-03-14
  • 1970-01-01
  • 1970-01-01
  • 2021-09-18
  • 2020-05-31
相关资源
最近更新 更多