- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在rest_framework 中为几个类别创建不同的 View 。但所有类别都来自同一模型。
令我印象深刻的是,这些类别可以作为关键字传递给 urlpatterns
(或通过 DefaultRouter
访问)。然后就可以根据需要使用关键字来过滤模型了。
这是我的观点:
class CategoryRankedViewSet(ModelViewSet):
serializer_class = CategoriesSerializer
def get_queryset(self):
return Categories.objects.all().order_by(self.kwargs['category'])
我能够完成这项工作的一种方法是:
urlpatterns = [path('<' + category + '>/', CategoryRankedViewSet.as_view({'get': 'list'}), name=category) for category in CATEGORIES]
但它并不完美,因为参数的键设置为 CATEGORIES
中第一项的值,而不是像 category
这样更通用的术语。
我正在考虑 DefaultRouter
,但是否可以将参数传递给 DefaultRouter
并不明显。
我也在寻找可以访问文字 url 并以这种方式访问类别的方法。在 DRF 的 ViewSet 中这似乎不可能。
此外,DefaultRouter
的 base_name
可以动态设置,但我找不到如何从 ViewSet 访问 base_name
。
有人尝试过这个方法吗?有更有效的方法吗?
更新事实证明,path()
具有 kwargs
属性,该属性可以传递关键字而不将它们作为 url 参数包含在内。因此不要将类别作为 url 参数传递。只需在 url 路径中使用类别变量并将类别作为关键字传递即可。
urlpatterns = [path(category + '/', CategoryRankedViewSet.as_view({'get': 'list'}), kwargs={'category': category}, name=category) for category in CATEGORIES]
有没有办法使用DefaultRouter
复制这个???
最佳答案
View 集可以通过使用@action装饰器装饰方法来标记额外的操作用于路由。您可以使用 Action 装饰器来解决您的问题
from rest_framework.decorators import action
class CategoryRankedViewSet(ModelViewSet):
serializer_class = CategoriesSerializer
def get_queryset(self):
return Categories.objects.all().order_by(self.kwargs['category'])
@action(methods=['get'],detail=False,url_path=r'list/(?P<category>[\w-]+)',url_name='categorylist')
def get_category(self,request,category=None):
return Categories.objects.all().order_by(category)
所以,现在您可以在 url 中提供任何类别并使用类别变量访问它。您的网址将类似于 rooturl/list/{categoryhere}。此网址将调用 get_category 方法。请记住,url_path 仅使用正则表达式,因此您不能在那里使用 slug。你可以在这个 link 中看到 Action 装饰器的代码你可以在djagorest中看到@action装饰器的例子。我希望这能解决您的问题。
关于python - 将动态参数传递给 urlpatterns 或 DefaultRouter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57749288/
是否可以定义 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
我是一名优秀的程序员,十分优秀!