在 DetailView 中使用对象
Using the object in DetailView
假设我有一个名为 City 的模型,它有一个名称属性。在我的 DetailView 中,我想使用它被点击的特定城市的名称来发出一些 api 请求,然后将它发送到 detailview.html.
有没有办法访问它?
如果 City
的 name
是 唯一的 ,是的。例如,您可以制作 URL:
from django.urls import path
from <i>app_name</i>.views import CityDetailView
urlpatterns = [
path('city/<b><str:name></b>/', CityDetailView.as_view(), name='city-detail'),
]
那么你可以做一个DetailView
:
from django.shortcuts import get_object_or_404
from django.views.generic.detail import DetailView
from <i>app_name</i>.models import City
class CityDetailView(DetailView):
model = City
template_name = '<i>name_of_template.html</i>'
def get_object(self, *args, **kwargs):
return get_object_or_404(City<b>, name=self.kwargs['name']</b>)
在模板中,例如列出城市的模板,您可以生成 URL:
<a href="<b>{% url 'city-detail' 'Bucharest' %}"</b>>Bucharest</a>
然而,通常 不是 使用名称,而是 slug [Django-doc]。 slug 通常在视觉上更令人愉悦,因为它避免了百分比编码数据。通常,您还会在 slug 字段上添加数据库索引。此外,DetailView
将查看 url 是否具有名为 slug 的参数,然后自动尝试过滤模型中名为 slug 的字段。
假设我有一个名为 City 的模型,它有一个名称属性。在我的 DetailView 中,我想使用它被点击的特定城市的名称来发出一些 api 请求,然后将它发送到 detailview.html.
有没有办法访问它?
如果 City
的 name
是 唯一的 ,是的。例如,您可以制作 URL:
from django.urls import path
from <i>app_name</i>.views import CityDetailView
urlpatterns = [
path('city/<b><str:name></b>/', CityDetailView.as_view(), name='city-detail'),
]
那么你可以做一个DetailView
:
from django.shortcuts import get_object_or_404
from django.views.generic.detail import DetailView
from <i>app_name</i>.models import City
class CityDetailView(DetailView):
model = City
template_name = '<i>name_of_template.html</i>'
def get_object(self, *args, **kwargs):
return get_object_or_404(City<b>, name=self.kwargs['name']</b>)
在模板中,例如列出城市的模板,您可以生成 URL:
<a href="<b>{% url 'city-detail' 'Bucharest' %}"</b>>Bucharest</a>
然而,通常 不是 使用名称,而是 slug [Django-doc]。 slug 通常在视觉上更令人愉悦,因为它避免了百分比编码数据。通常,您还会在 slug 字段上添加数据库索引。此外,DetailView
将查看 url 是否具有名为 slug 的参数,然后自动尝试过滤模型中名为 slug 的字段。