django - 动态路径:确保 urlpatterns 是路径列表
问题描述
我有很多这样的通用模式:
urlpatterns = [
path('json/ay/<int:pk>', AyView.as_view(), name='json_ay'),
path('json/by/<int:pk>', ByView.as_view(), name='json_by'),
...
]
(当然,这些类并不简单Ay
,或者By
这是为了清楚起见),我试图将它们转换为这样的通用函数:
first_cap_re = re.compile('(.)([A-Z][a-z]+)')
all_cap_re = re.compile('([a-z0-9])([A-Z])')
def convert(name):
s1 = first_cap_re.sub(r'\1_\2', name)
return all_cap_re.sub(r'\1_\2', s1).lower()
def json_view(view_class):
view_name = '_'.join(convert(view_class.__name__).split('_')[:-1])
return path(f'json/{view_name}/<int:pk>', view_class.as_view(),
name=f'json_{view_name}'),
然后这样称呼它:
urlpatterns = [
json_view(AyView),
json_view(ByView),
...
]
我收到此错误:
ERRORS:
?: (urls.E004) Your URL pattern (<URLPattern 'json/ay/<int:pk>' [name='json_ay']>,)
is invalid. Ensure that urlpatterns is a list of path() and/or re_path() instances.
HINT: Try using path() instead of a tuple.
我不知道为什么,有什么想法吗?
解决方案
这只是 return 语句末尾的一个额外逗号导致它返回一个元组。去掉逗号。
return path(f'json/{view_name}/<int:pk>', view_class.as_view(),
name=f'json_{view_name}')
# ^
推荐阅读
- python-3.x - 如何允许正则表达式搜索 '\xcf\x83' 这种字符串
- powershell - Jupyterlab 终端不工作,但 windows 中的 cmd 工作正常
- python - Flask - 通过 GET 请求发送数据
- terminal - 关闭 Zsh shell(或终端)时是否可以调用脚本?
- neo4j - 创建子节点之间的关系
- javascript - 显示 Bootstrap 4 模式,但在按钮内保持 href 工作
- go - 找不到包“rsc.io/quote”
- vue.js - Vuetify - 如何有条件地更改 v-btn 的点击处理程序和文本?
- pyspark - Pyspark:转换/转换为数字类型
- ruby - RSpec 期望调用赛璐珞基类的重写方法