django - 如何解决 django 2.2 上的 ListView 问题
问题描述
我对 ListView 有疑问,无法从流派电影中获取查询集。如果我转到类别,我可以看到电影类别,但如果我想按类型查看电影,我会看到一个空列表。
views.py
class MovieListView(ListView):
context_object_name = 'movies'
def get_queryset(self):
if self.kwargs.get('category') is not None:
movie_list = Movie.objects.filter(
category__slug=self.kwargs.get('category'),
published=True,
)
movies = movie_list
elif self.kwargs.get('genre') is not None:
movie_list = Movie.objects.filter(
genre__slug=self.kwargs.get('genre'),
published=True,
)
movies = movie_list
else:
movies = Movie.objects.filter(published=True)
return movies
urls.py
app_name = "movies"
urlpatterns = [
path('', MovieListView.as_view(), name='movie_list'),
path('<id>-<name>/', MovieDetailView.as_view(), name='movie_detail'),
path("<slug:category>/", MovieListView.as_view(), name="category_post"),
path("<slug:genre>/", MovieListView.as_view(), name="genre_list"),
]
解决方案
urls.py
没有多大意义。匹配模式的模式与匹配的'<slug:category>/'
模式完全相同'<slug:genre>/'
。所以它总是在这里走第一条路。
因此,您应该使路径不同,例如通过前缀:
urlpatterns = [
path('', MovieListView.as_view(), name='movie_list'),
path('<id>-<name>/', MovieDetailView.as_view(), name='movie_detail'),
path('category/<slug:category>/', MovieListView.as_view(), name='category_post'),
path('genre/<slug:genre>/', MovieListView.as_view(), name='genre_list'),
]
category
现在,如果您在过滤上或上过滤,前缀将变得清晰genre
。你当然可以用不同的方式进行区分。但最重要的是模式不应重叠。
推荐阅读
- angular7 - 当我处于开发阶段时,如何从角度项目外部提供 img src 路径
- python-3.x - 为什么 pandas.to_csv 在尝试保留 NaN 时会丢弃数字?
- flutter - 如何在 Flutter 中本地化服务器数据?
- javascript - 获取输入的值并将其转换为某种数组格式
- reactjs - 创建反应应用程序 - 没有打字稿,得到错误:无法加载解析器'@typescript-eslint/parser'
- javascript - 将 socket.io 与快速路由器一起使用
- javascript - 使用 XHR 提交 HTML 表单在基于 iOS/iPadOS 的设备上不起作用
- laravel-5 - 无法通过 larvel 5.5 的作曲家下载任何 pdf 包
- amazon-web-services - 哪个时间序列数据库用于一致的开发产品 (aws) 奇偶校验
- c# - C# 使用参数从 Post 中检索数据