具有基于 class 的视图的干净、基于名称的 url
Clean, name-based urls with class-based views
有没有一种方法可以编写如下所示的 url:unitedstates.com/state/city 以及基于 class 的视图姜戈? State 视图有一个 slug 和一个状态模型。 城市 是一样的。虽然我可以生成 unitedstates.com/state 或 unitedstates.com/city,但我不知道如何获取 美国。com/state/city。
文档对我没有帮助。我只是出于好奇想知道。提供任何帮助或解释将不胜感激。
谢谢。
是的,这是可以做到的。我在这里举一个例子。
定义您的模型:
class State(models.Model):
slug = models.SlugField()
class City(models.Model):
slug = models.SlugField()
state = models.ForeignKey(State)
定义你的观点:
from django.views.generic import DetailView
from .models import City
class CityDetailView(DetailView):
def get_object(self):
city = City.objects.get(
slug=self.kwargs.get('city'),
state__slug=self.kwargs.get('state')
)
return city
最后,将此添加到您的 urls.py:
from django.conf.urls import url
from .views import CityDetailView
urlpatterns = [
url(r'^(?P<state>\w+)/(?P<city>\w+)/$', CityDetailView.as_view()),
]
有没有一种方法可以编写如下所示的 url:unitedstates.com/state/city 以及基于 class 的视图姜戈? State 视图有一个 slug 和一个状态模型。 城市 是一样的。虽然我可以生成 unitedstates.com/state 或 unitedstates.com/city,但我不知道如何获取 美国。com/state/city。
文档对我没有帮助。我只是出于好奇想知道。提供任何帮助或解释将不胜感激。
谢谢。
是的,这是可以做到的。我在这里举一个例子。
定义您的模型:
class State(models.Model):
slug = models.SlugField()
class City(models.Model):
slug = models.SlugField()
state = models.ForeignKey(State)
定义你的观点:
from django.views.generic import DetailView
from .models import City
class CityDetailView(DetailView):
def get_object(self):
city = City.objects.get(
slug=self.kwargs.get('city'),
state__slug=self.kwargs.get('state')
)
return city
最后,将此添加到您的 urls.py:
from django.conf.urls import url
from .views import CityDetailView
urlpatterns = [
url(r'^(?P<state>\w+)/(?P<city>\w+)/$', CityDetailView.as_view()),
]