如何在 DJANGO 中为动态创建的 URL 设置 URL 别名?
How to set up URL aliases for dynamically created URLs in DJANGO?
在我的站点中,我有使用主键(出于 privacy/security 原因使用 uuid.uuid4()
)作为 URL 即时创建的页面。我最终得到 .../reports/e657334b-75e2-48ce-8571-211251f1b341/
有没有办法为所有这些动态创建的站点创建别名,例如 .../reports/report/
.
现在我的 urls.py 包括以下内容:
path("reports/<str:pk>/", views.report_detail, name="report")
我尝试将其更改为:
re_path('reports/<str:pk>/', RedirectView.as_view(url='/reports/report/'), name="report"),
path("reports/report/", views.report_detail),
但是我访问了包含 link 长 URL 的站点,我收到以下错误:
NoReverseMatch at /reports/
Reverse for 'report' with arguments '('e657334b-75e2-48ce-8571-211251f1b341',)' not found. 1 pattern(s) tried: ['reports/str:pk/']
该站点的模板包括:
<a class="card-title" href="{% url 'report' report.pk%}">
我还尝试了以下网址:
path("reports/report/", views.report_detail),
path('reports/<str:pk>/', RedirectView.as_view(url='reports/report/'), name="report"),
允许加载以前的站点,但是当我单击 link 时出现以下 404 错误:
Request URL: http://127.0.0.1:8000/reports/e657334b-75e2-48ce-8571-211251f1b341/reports/report/
我正在尝试为多个页面设置一个别名 - 本质上是 removing/replacing 一个单词的长 uuid。
在不尝试创建别名的情况下,网站运行良好。
如果你真的不想将报告的pk
/uuid
传递给缩短的url,你可以在会话
中传递它
创建自定义 RedirectView
将 pk
保存到会话中,然后在目标视图中读取 pk
class ReportRedirect(RedirectView):
def get(self, request, pk):
request.session['report_pk'] = pk
return super().get(request, pk)
def report_detail(request):
report_pk = request.session['report_pk']
...
您使用自定义 RedirectView
就像使用内置
path("reports/report/", views.report_detail),
path('reports/<str:pk>/', views.ReportRedirect.as_view(url='/reports/report/'), name="report"),
在我的站点中,我有使用主键(出于 privacy/security 原因使用 uuid.uuid4()
)作为 URL 即时创建的页面。我最终得到 .../reports/e657334b-75e2-48ce-8571-211251f1b341/
有没有办法为所有这些动态创建的站点创建别名,例如 .../reports/report/
.
现在我的 urls.py 包括以下内容:
path("reports/<str:pk>/", views.report_detail, name="report")
我尝试将其更改为:
re_path('reports/<str:pk>/', RedirectView.as_view(url='/reports/report/'), name="report"),
path("reports/report/", views.report_detail),
但是我访问了包含 link 长 URL 的站点,我收到以下错误:
NoReverseMatch at /reports/
Reverse for 'report' with arguments '('e657334b-75e2-48ce-8571-211251f1b341',)' not found. 1 pattern(s) tried: ['reports/str:pk/']
该站点的模板包括:
<a class="card-title" href="{% url 'report' report.pk%}">
我还尝试了以下网址:
path("reports/report/", views.report_detail),
path('reports/<str:pk>/', RedirectView.as_view(url='reports/report/'), name="report"),
允许加载以前的站点,但是当我单击 link 时出现以下 404 错误:
Request URL: http://127.0.0.1:8000/reports/e657334b-75e2-48ce-8571-211251f1b341/reports/report/
我正在尝试为多个页面设置一个别名 - 本质上是 removing/replacing 一个单词的长 uuid。
在不尝试创建别名的情况下,网站运行良好。
如果你真的不想将报告的pk
/uuid
传递给缩短的url,你可以在会话
创建自定义 RedirectView
将 pk
保存到会话中,然后在目标视图中读取 pk
class ReportRedirect(RedirectView):
def get(self, request, pk):
request.session['report_pk'] = pk
return super().get(request, pk)
def report_detail(request):
report_pk = request.session['report_pk']
...
您使用自定义 RedirectView
就像使用内置
path("reports/report/", views.report_detail),
path('reports/<str:pk>/', views.ReportRedirect.as_view(url='/reports/report/'), name="report"),