- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试创建一个博客,并希望文章按类别划分。 Django 版本:2.1,Python:3.7我不明白我应该如何更改 urlpatterns 中的路径以显示类别名称,而不是 <int:pk>
.在哪里可以查看 Django 代码示例?
我尝试执行 path('category.title') 但它不起作用。
这是我的模型.py:
from django.db import models
from django.conf import settings
from django.urls import reverse
class Category(models.Model):
title = models.CharField(max_length=50)
image = models.ImageField(upload_to='', blank=True)
def __str__(self):
return self.title
class Article(models.Model):
title = models.CharField(max_length=255)
body = models.TextField()
date = models.DateTimeField(auto_now_add=True)
author = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE
)
image = models.ImageField(upload_to='', blank=True)
cat = models.ForeignKey(
Category, on_delete=models.CASCADE, null=True,
)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('article_detail', args=[str(self.id)])
class Comment(models.Model):
article = models.ForeignKey(Article, on_delete=models.CASCADE, related_name='comments')
comment = models.CharField(max_length=100)
author = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
)
def __str__(self):
return self.comment
def get_absolute_url(self):
return reverse('article_list')
这是 urls.py:
from django.urls import path
from . import views
from .models import Category
urlpatterns = [
path('', views.ArticleViewList.as_view(), name='article_list'),
path('<int:pk>/edit/', views.ArticleUpdateView.as_view(), name='article_edit'),
path('<int:pk>/delete/', views.ArticleDeleteView.as_view(), name='article_delete'),
path('<int:pk>', views.ArticleDetailView.as_view(), name='article_detail'),
path('new/', views.ArticleCreateView.as_view(), name='article_new'),
]
这是返回文章列表的基于类的 View :
class ArticleViewList(LoginRequiredMixin, ListView):
model = models.Article
template_name = 'article_list.html'
login_url = 'login'
1)我希望在地址栏中显示类别的标题2)我想知道使用基于类的 View 是不是一个好的决定3)我想知道如何在模板循环中显示特定类别的文章
最佳答案
希望您的网址看起来像:/
- 所有帖子的列表,无论类别如何/category1
- 类别 1 中所有帖子的列表/category1/1
- post #1 的详细信息(可选,必须或不得不属于 category1)
你需要做几件事:
1) 您需要将 SlugField
添加到您的类别模型 - 这是 url 中的实际字符串,因为对 url 中的内容有一些限制。
模型.py:
class Category(models.Model):
title = models.CharField(max_length=50)
slug = models.SlugField(unique=True)
image = models.ImageField(upload_to='', blank=True)
def __str__(self):
return self.title
2) 修改urlpatterns
以要求slug
urls.py:
urlpatterns = [
path('', ArticleViewList.as_view(), name='article_list'),
path('<slug:catslug>', ArticleViewList.as_view(), name='article_list'),
path('<slug:catslug>/<int:pk>', ArticleDetailView.as_view(), name='article_detail'),
]
3) 为您的 ArticleViewList
添加查询集过滤器,这样您就可以仅根据 slug 字段值包含来自特定类别的文章。
views.py:
from django.shortcuts import get_object_or_404
class ArticleViewList(LoginRequiredMixin, ListView):
model = Article
template_name = 'article_list.html'
login_url = 'login'
def get_queryset(self):
queryset = super().get_queryset()
if 'catslug' in self.kwargs:
category_slug = self.kwargs['catslug']
category = get_object_or_404(Category, slug=category_slug)
queryset = queryset.filter(cat=category)
return queryset
4) (可选)通过修改查询集强制检查您的文章详细信息 View 是否属于某个类别。
views.py:
class ArticleDetailView(LoginRequiredMixin, DetailView):
model = Article
template_name = 'article_item.html'
login_url = 'login'
def get_queryset(self):
queryset = super().get_queryset()
category_slug = self.kwargs['catslug']
category = get_object_or_404(Category, slug=category_slug)
queryset = queryset.filter(cat=category)
return queryset
使用 CBV 是一个明智的决定 - 因为您的所有 View 都很简单,并且正是 CBV 的设计目的。它将允许您拥有小巧且可读的代码。
您可以使用 {% regroup %}
按类别对文章进行分组:
文章列表.html:
{% regroup object_list by cat as categories %}
{% for category in categories %}
{{ category.grouper }}:</br>
{% for object in category.list %}
{{ object }}<br>
{% endfor %}
{% endfor %}
关于python - 我应该如何更改 "urlpatterns"中的路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56087814/
是否可以定义 Django urlpattern,它可以获取任意数量的相同类型参数并将它们传递给 View ? 假设我想创建一个页面,从 url 获取数字列表并对它们求和。所以这些将是有效的 url:
我有应用程序 app1。它已连接(通过 INSTALLED_APPS)app2;假设 app2 对我来说是某种黑盒子。但我知道 app2 在它的 url 中有一些 i18n_patterns。 我需要
我需要一个 URL 的正则表达式,例如: /slug/#slug/slug/ 我知道它应该是这样的: r'^(?P[-\w]+)/#(?P[-\w]+)/(?P[-\w]+)/$' 但是我遇到了字符
我正在使用 Nuxt.js 框架,我的 WorkBox 配置如下所示 workbox: { workboxURL: 'https://cdn.jsdelivr.net/npm/workbox-
我能找到的所有 django 站点的 urlpatterns 示例都有一个单独的条目,用于输入没有前导斜杠或根文件夹的 url。然后他们处理每一行的子文件夹。我不明白为什么一个简单的 /? 正则表达式
我目前有一个带有以下注释的主 Controller servlet: @WebServlet(name="ControllerServlet", urlPatterns={"/", "/home"})
我有一个 Django 项目,工作的 urls.py 如下所示: urlpatterns = [ path('', views.index, name='index'), path('
我是 Python 和 Django 的初学者,正在研究书中找到的简单 IoT 教程。该项目是从 Django 应用程序控制 LED 电路。我复制代码后,很少出现错误,因为书中的Python和Djan
我正在尝试将 WebFilter 与 JSF 2 结合使用,但我的过滤器无法正常工作。无法识别 urlPattern。 我的过滤器类: @WebFilter(urlPatterns = {"/rws/
我正在使用如下所示的 WebServlet 注释: @WebServlet( urlPatterns = {"/en", "/de", "/fr"}) public class GeoServlet
虽然我似乎有它们的“精确”副本,但我已经阅读了很多示例,所以我无法弄清楚为什么当我导航到 /login 而不是 /时我的过滤器会执行限制/*。我已尝试使用注释(如下例所示)和 XML 来定义 WebF
在 Servlet 类中: @WebServlet(name = "SinglePost", urlPatterns = {"/post/*"}) public class SinglePost ex
我正在使用 Django 构建一个简单的网络应用程序。我的用户分为多个组,例如 Group A、Group B 等。 我想做的是动态更新 urls.py 中的 urlpatterns 列表,这样我就可
我正在尝试创建一个博客,并希望文章按类别划分。 Django 版本:2.1,Python:3.7我不明白我应该如何更改 urlpatterns 中的路径以显示类别名称,而不是 .在哪里可以查看 Dj
这是一个简短的问题,但我找不到快速的答案。现在我有一个 Servlet BaseServlet,当用户请求以下任何 url 时: host host/ host/BaseServlet 它应该始终引用
我正在开发一个需要加载动态模块(在运行时)的 Django 应用程序。现在我可以上传(从客户端浏览器到服务器)“插件”并在数据库中注册插件模型等。但我需要一种方法来处理每个插件的 urlpattern
在我的项目中,我有一个应用程序,它有自己的 urls.py,就像这样 urlpatterns = patterns('', (r'^(?P\w+)/$', 'MainSite.views.home_p
我有这样的网址结构:page/section/subsection/article,其中 section、subsection 和 article 是用户生成的 slug 名称。 如何编写urlpat
我正在帮助一个 friend 完成一个项目,但在将 urlpatterns url 转换为其等效路径时遇到问题。有什么帮助吗? 我已经完成了第一部分。 path('store', views.prod
我想在rest_framework 中为几个类别创建不同的 View 。但所有类别都来自同一模型。 令我印象深刻的是,这些类别可以作为关键字传递给 urlpatterns (或通过 DefaultRo
我是一名优秀的程序员,十分优秀!