将模型数据传递给 Django 中的 urlpatterns urls.py
Passing model data to urlpatterns in Django's urls.py
我正在尝试在 urls.py 中编写一个通用的 urlpatterns 条目来替换硬编码条目,如下所示:
path('apple/', RedirectView.as_view(url='/apple/abc/'), name='apple_redirect'),
path('orange/', RedirectView.as_view(url='/orange/def/'), name='orange_redirect'),
path('banana/', RedirectView.as_view(url='/banana/ghi/'), name='banana_redirect'),
名为 fruits 的模型包含以下数据:
name = 'apple'
url = 'apple/abc/'
name = 'orange'
url = '/orange/def/'
name = 'banana'
url = '/banana/ghi/'
我想避免在 fruits 模型中添加新条目时手动添加另一条路径的需要。
你应该像这样捕捉 url 参数并将它传递给你的视图
from django.shortcuts import redirect, get_object_or_404
def fruit_redirect_view(request, url_path):
fruit = get_object_or_404(Fruit, name=url_path)
return redirect(fruit.url)
所以如果存在这样名字的水果,请求将被重定向到水果的url,否则会抛出404错误
如果你想使用RedirectView
,你可以继承它并覆盖get_redirect_url
。
class FruitRedirectView(RedirectView):
def get_redirect_url(self):
fruit = get_object_or_404(Fruit, name=self.kwargs['fruit'])
return fruit.url
然后将您的个人水果 URL 图案替换为:
path('<slug:fruit>/', FruitRedirectView.as_view(), name='fruit_redirect'),
请注意,您不需要在此处使用 RedirectView
。 Alex C 的视图更容易理解,特别是如果您不熟悉 Django 的通用视图。
请注意,一旦您添加了 <slug:fruit>/
,该视图将针对不在数据库中的任何水果引发 404 错误。这与 URL 模式中的 apple/
和 orange/
略有不同 - 在这种情况下,Django 可能能够匹配 URL 列表中更靠后的模式模式。
我正在尝试在 urls.py 中编写一个通用的 urlpatterns 条目来替换硬编码条目,如下所示:
path('apple/', RedirectView.as_view(url='/apple/abc/'), name='apple_redirect'),
path('orange/', RedirectView.as_view(url='/orange/def/'), name='orange_redirect'),
path('banana/', RedirectView.as_view(url='/banana/ghi/'), name='banana_redirect'),
名为 fruits 的模型包含以下数据:
name = 'apple'
url = 'apple/abc/'
name = 'orange'
url = '/orange/def/'
name = 'banana'
url = '/banana/ghi/'
我想避免在 fruits 模型中添加新条目时手动添加另一条路径的需要。
你应该像这样捕捉 url 参数并将它传递给你的视图
from django.shortcuts import redirect, get_object_or_404
def fruit_redirect_view(request, url_path):
fruit = get_object_or_404(Fruit, name=url_path)
return redirect(fruit.url)
所以如果存在这样名字的水果,请求将被重定向到水果的url,否则会抛出404错误
如果你想使用RedirectView
,你可以继承它并覆盖get_redirect_url
。
class FruitRedirectView(RedirectView):
def get_redirect_url(self):
fruit = get_object_or_404(Fruit, name=self.kwargs['fruit'])
return fruit.url
然后将您的个人水果 URL 图案替换为:
path('<slug:fruit>/', FruitRedirectView.as_view(), name='fruit_redirect'),
请注意,您不需要在此处使用 RedirectView
。 Alex C 的视图更容易理解,特别是如果您不熟悉 Django 的通用视图。
请注意,一旦您添加了 <slug:fruit>/
,该视图将针对不在数据库中的任何水果引发 404 错误。这与 URL 模式中的 apple/
和 orange/
略有不同 - 在这种情况下,Django 可能能够匹配 URL 列表中更靠后的模式模式。