【问题标题】:Complicated url django复杂的 url django
【发布时间】:2016-02-24 21:17:43
【问题描述】:

我想创建一个这样的网址:

example.com/reviews/state/city/school/program

州、城市、学校和项目必须从模型中动态生成。我一直在谷歌搜索,但我不知道要问的正确问题。我陷入了僵局。在我解决这个问题之前,我真的不知道如何编写任何视图或 urls.py

提前感谢您的帮助。

编辑:我已经查看了有关编写 url 的教程。但是,我不想在我的正则表达式中使用数字。我希望从模型字段动态生成 URL。我该怎么做?

应用模型

from django.db import models

import numpy as np

class State(models.Model):
    short_name = models.CharField('State abbreviation', max_length=2)
    name = models.CharField('State Name', max_length=15)

    def __str__(self):
        return self.name

class City(models.Model):
    state = models.ForeignKey(State)
    name = models.CharField('City', max_length=100)

    class Meta:
        verbose_name = 'City'
        verbose_name_plural = 'Cities'

    def __str__(self):
        return self.name

class ZipCode(models.Model):
    city = models.ForeignKey(City)
    code = models.CharField(max_length=5)

    def __str__(self):
        return self.code

class Address(models.Model):
    street = models.CharField(max_length=255, default='')
    zip_code = models.ForeignKey(ZipCode, default='')

    def __str__(self):
        return self.street

    class Meta:
        verbose_name = 'Address'
        verbose_name_plural = 'Addresses'

class Program(models.Model):
    program_type = models.CharField(max_length=3)

    def __str__(self):
        return self.program_type

class Specialty(models.Model):
    specialty = models.CharField('Specialty', max_length=30, default='')

    def __str__(self):
        return self.specialty

class School(models.Model):
    program = models.ForeignKey(Program, default='')
    specialty = models.ForeignKey(Specialty, default='', null=True)
    address = models.ForeignKey(Address, default='')
    school_name = models.CharField(max_length=100, default='')
    created = models.DateTimeField('Date published')

    def __str__(self):
        return self.school_name

    class Meta:
        verbose_name = 'School'
        verbose_name_plural = 'Schools'

【问题讨论】:

  • 好吧,恐怕不问我们就无法给出答案。动态 URL 是 Django 的基础,在本教程中有很好的介绍;唯一额外的事情是你想在你的 URL 中有几个动态元素,但这只是意味着你的模式中有几个正则表达式组。具体来说,您在哪里遇到了麻烦?
  • 阅读official tutorial关于编写URL。
  • 我不知道 URL 文档中的什么内容会让您相信它只适用于数字。如果您想使用字符串,请使用它们。

标签: python django url


【解决方案1】:

也许你可以尝试在 urls.py 中创建一个如下所示的 url

urls.py
# dont forget import views
urlpatterns = [
    url(r'^reviews/(?P<state>[a-z]+)/(?P<city>[a-z]+)/(?P<school>[a-z]+)/(?P<program>[a-z]+)/$',
        views.reviews, name='reviews')
]

你的views.py应该是这样的:

view.py
def reviews(request, state=None, city=None, school=None, program=None):
    # do something

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-08
    • 2012-10-25
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多