python - 在 Django 中创建 url 的正确方法

标签 python django django-urls

在 Django 中,我有我的应用程序,我在其中放置有关国家和这些国家/地区城市的信息。这是我的 model.py 文件:

class Country(models.Model):
        class Meta:
                verbose_name_plural = u'Countries'

        name = models.CharField(max_length=50)
        slug = models.CharField(max_length=255)
        description = models.TextField(max_length=10000, blank=True)

        def __unicode__(self):
                return self.name

class City(models.Model):
        class Meta:
                verbose_name_plural = u'Cities'

        name = models.CharField(u'city', max_length=200)
        slug = models.CharField(max_length=255, blank=True)
        description = models.TextField(max_length=10000, blank=True)
        country = models.ForeignKey('Country', blank=True, null=True)

        def __unicode__(self):
                return self.name

我有我的国家的详细 View ,在这个 View 中有这个国家的城市列表(views.py):

def CountryDetail(request, slug):
        country = get_object_or_404(Country, slug=slug)
        list_cities = City.objects.filter(country=country)
        return render(request, 'country/country.html', {'country':country, 'list_cities':list_cities})

这是我的 urls.py:

url(r'^(?P<slug>[-_\w]+)/$', views.CountryDetail, name='country'),

我想创建一个城市的 url,其中包含国家和城市的别名,例如 domain.com/spain/barcelona/

所以我创建了城市的详细 View ,它看起来像这样:

def CityDetail(request, resortslug):
        country = Country.objects.get(slug=countryslug)
        city = get_object_or_404(City, country=country, slug=cityslug)
        return render(request, 'country/city.html', {'country':country, 'city':city})

这是我的城市详细信息的 urls.py:

url(r'^(?P<countryslug>[-_\w]+)/(?P<cityslug>[-_\w]+)$', views.CityDetail, name='resort'),

这就是我链接到城市的国家/地区的 html 文件详细信息中的样子:

<h1>{{country.name}}</h1>
<p>{{country.description}}</p>
<h2>Cities</h2>
{% for city in list_cities %}
   <a href="/{{country.slug}}/{{city.slug}}">
      <p>{{city.name}}</p>
   </a>
{% endfor %}

但是当我点击城市 url 的链接时,出现 404 错误。

Page not found (404)
Request Method: GET
Request URL:    http://domain.com/spain/barcelona
Using the URLconf defined in myproject.urls, Django tried these URL patterns, in this order:
The current URL, spain/barcelona, didn't match any of these.

这是我项目中的 url.py

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^country/', include('country.urls')),

请帮我理解为什么会这样,谢谢。

最佳答案

由于您的项目在 country/ 前缀下包含您应用的 URL,因此城市页面可作为 country/spain/barcelonahttp://domain.com/country/spain/barcelona 使用。 .

关于python - 在 Django 中创建 url 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35603583/

相关文章:

django - 如何在 django 中缓存模型方法?

django - Django URL UUID不起作用

python - Django错误: NameError name 'current_datetime' is not defined

python - 如何在 Django 中重定向到不同的 URL?

python - 如何调试在 Eclipse 中本地运行的 Celery/Django 任务

Python脚本不写入txt文件

Python:混合键类型的字典如何工作?

python - Django 1.3 及更高版本中已弃用的 redirect_to 的基于类的 View 替代方案

python - Xml 文件到 Csv 的文件夹

django - 在 Django 模型中存储多选结果的正确方法