【问题标题】:Clean, name-based urls with class-based views干净的、基于名称的 url 和基于类的视图
【发布时间】:2016-08-17 14:14:01
【问题描述】:
有没有办法在 django 中使用基于类的视图编写如下所示的 url:unitedstates.com/state/city? State 视图有一个 slug 和一个状态模型。 城市 是一样的。虽然我可以生成 unitedstates.com/state 或 unitedstates.com/city,但我不知道如何获取 unitedstates.com/state/city强>。
文档对我没有帮助。我只是出于好奇想知道。任何帮助或解释将不胜感激。
谢谢。
【问题讨论】:
标签:
django
python-3.x
django-urls
django-class-based-views
clean-urls
【解决方案1】:
是的,这可以做到。我在这里举一个例子。
定义你的模型:
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()),
]