python - 如何从 django 请求中获取 urlpattern
问题描述
例如:
from django.urls import include, path
urlpatterns = [
path('index/', views.index, name='main-view'),
path('bio/<username>/', views.bio, name='bio'),
path('articles/<slug:title>/', views.article, name='article-detail'),
path('articles/<slug:title>/<int:section>/', views.section, name='article-section'),
path('weblog/', include('blog.urls')),
...
]
我想'articles/<slug:title>/'
从请求中获取字符串,而不是 title var 的值。
我使用 Django 1.8.2
解决方案
如果你想要只是真实的path
,你可以使用request.path
. 文档
如果你想要<slug:title>
参数,你只需像这样进入你的view
函数。function arguments
def some_view(request, title):
# do your job.
编辑
你需要这两个功能。
from django.urls import resolve, get_resolver, URLResolver, URLPattern
def get_view_name_by_path(path):
result = resolve(path=path)
return result.view_name
def find_url_pattern_by_name(name):
if name is None:
return None
def deep_find(rs):
for r in rs.url_patterns:
if isinstance(r, URLResolver):
result = deep_find(r)
if result is not None:
return result
elif isinstance(r, URLPattern):
if r.name == name:
return r.pattern
return deep_find(get_resolver())
你必须name
在你的url pattern
urlpatterns = [
...
path('articles/<slug:title>', your_view, name='your_view_name'),
...
]
最后,您可以在视图中看到您的模式。
def your_view(request, title):
view_name = get_view_name_by_path(request.path)
pattern = find_url_pattern_by_name(view_name)
...
推荐阅读
- javascript - 它作为组合值传递 4,5,6
- haskell - GHC 多包版本警告的严重性
- ssis - 将可变长度记录解析为表列,其中特定列在 SSIS 2016 中是动态的
- c# - 如何从 azure 函数获取 json 对象的输出?
- ios - 使用 OTA 在 iOS 13 上注册到用户注册模式时出现“服务器返回用户注册配置文件”错误
- python - Pyspark 丢弃没有过滤器的 RDD 行
- swift - 如何保持 UISlider 拇指小但分辨率更高的照片?
- typescript - 如何在类型包装器(映射类型)中转发(众所周知的)符号?
- c - C SECCOMP 阻塞或关闭 STDIN/STDOUT
- algorithm - 使用约束将 N 个数组划分为 K 个组