使用基于类的视图清理基于名称的URL

时间:2016-04-24 04:48:46

标签: django python-3.x django-urls django-class-based-views clean-urls

有没有办法写一个这样的网址: unitedstates.com/state/city 和django中基于类的视图? 状态视图有一个slug并且具有状态模型。 城市会是一样的。虽然我可以生成 unitedstates.com/state unitedstates.com/city ,但我无法弄清楚如何获得 unitedstates.com/state/city

文档对我没有帮助。出于好奇,我想知道。我们将非常感谢您提供的任何帮助或解释。

谢谢。

1 个答案:

答案 0 :(得分: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()),
]