как использовать название категории в качестве суффикса URL в Django

Теперь мой URL выглядит так: https://mywebsite.com/newscategory_lists-5

Я хочу изменить его на: https://mywebsite.com/categoryname

Вот моя модель:

class Category(models.Model):
    name = models.CharField(max_length=40)  # 分类名

    class Meta:
        verbose_name = "分类"
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name

Вот urls.py:

path('category_lists-<int:category_pk>', views.categoryNewsList, name="category_news_list"),

Вот мой view.py:

def categoryNewsList(request, category_pk):
    category = get_object_or_404(Category, pk=category_pk)
    news_list = News.objects.filter(category=category)

    return render(request, "categories_list.html", {
        'news_list': news_list,
        'category': category
    })

person William    schedule 15.10.2018    source источник
comment
Обычно для этого используется slug: docs.djangoproject.com/en/2.1/ref/models/fields/   -  person Willem Van Onsem    schedule 16.10.2018
comment
вместо name используйте slug. Для этого вам нужно добавить SlugField() в вашу модель.   -  person Lemayzeur    schedule 16.10.2018


Ответы (1)


попробуйте это, в url.py

url(r'^(?P<link>[\w|-]+)/$', views.categoryNewsList, name='categoryNewsList')

view.py

def categoryNewsList(request, link):
categories = {
    "graphics-design": "GD",
    "digital-marketing": "DM",
    "video-animation": "VA",
    "music-audio": "MA",
    "programming-tech": "PT"
}
try:
    foos = Category.objects.filter(name=categories[link])
    return render(request, 'yoursite/home.html', locals())
except KeyError:
    return redirect('yoursite/home.html')

и в вашем template.html поместите ссылки:

    <nav class="navbar navbar-expand-sm bg-light navbar-light justify-content-center">
  <ul class="navbar-nav">
    <li class="nav-item">
      <a class="nav-link" href="/">All categories</a>
    </li>
    <li class="nav-item">
      <a class="nav-link" href="/graphics-design">Graphics & Design</a>
    </li>
    <li class="nav-item">
      <a class="nav-link" href="/digital-marketing">Digital Marketing</a>
    </li>
    <li class="nav-item">
      <a class="nav-link" href="/video-animation">Video & Animation</a>
    </li>
    <li class="nav-item">
      <a class="nav-link" href="/music-audio">Music & Audio</a>
    </li>
    <li class="nav-item">
      <a class="nav-link" href="/programming-tech">Programming & Tech</a>
    </li>
  </ul>
person Dilshod    schedule 16.10.2018