Hello StackOverFlow成员,在我开始讨论之前,让我回顾一下我的想法/过程,以帮助进一步减少我的问题。当我点击“location_tree.html”中的位置对象时,它会将我重定向到新页面“location.html”,显示位置名称及其类型。在同一页面上,名称将是指向另一个页面的超链接,其中包含有关“位置”的更多详细信息。
以上是我想要的一般流程,但是当我尝试从location.html点击该名称时,它会将我重定向到此错误:
> / accounts / location / 2 /的NoReverseMatch 使用关键字参数'{u'pk':2}'找不到“大陆”的反转。 1>模式尝试:['accounts / location /(?> P \ d +)/ location_continent /(?P \ d +)/']
需要注意的一些关键事项,我使用的是python2.7。最后,当我从location.html删除{%url%}时,一切正常。 这是我的工作代码,
应用/ models.py:
class Location(models.Model):
title = models.CharField(max_length=255)
location_type = models.CharField(max_length=255, choices=LOCATION_TYPES)
parent = models.ForeignKey("Location", null=True, blank=True,
related_name="parent_location")
def __unicode__(self):
return self.title
class Continent(models.Model):
title = models.CharField(max_length=255)
location = models.OneToOneField(Location, on_delete=models.CASCADE, primary_key=True)
is_an_island = models.BooleanField(default=False)
def __unicode__(self):
return self.location.title
应用/ views.py:
def view_page_location(request, location_id):
location = Location.objects.get(id=location_id)
if location.location_type == 'Continent':
continent = Continent(location=location, is_an_island=False)
return render(request, 'accounts/location.html', {'location':location, 'continent':continent})
def view_continent(request, pk):
get_continent=get_object_or_404(Continent, pk)
return render(request, 'accounts/location_continent.html', {'get_continent':get_continent})
项目/ urls.py:
from App.views import *
url(r'^accounts/location/(?P<location_id>\d+)/', view_page_location, name='location'),
url(r'^accounts/location/(?P<location_id>\d+)/location_continent/(?P<pk>\d+)/', view_continent, name='continent'),
模板,
location_tree.html:
{% for child in locations %}
{% if child.parent == location %}
<ul>
<a href="{% url 'location' location_id=child.id %}">{{ child }}</a>
location.html:
{% if location.location_type == 'Continent' %}
<h2> Location: <a href="{% url 'continent' pk=location.pk %}">{{ location.title }}</a></h2>
<h3> Type: {{ location.location_type }} </h3></br>
location_continent.html:
<p> hello </p>
我离开location_continent非常通用,因为我想知道我是否可以让它工作。我觉得Urls.py中的某个地方出了问题,或者我没有正确构建我的views.py。
所以大问题是,为了解决这个错误,我需要改变/修改什么?我自己也看不到,所以我转向'你'。我自己也可以阅读任何链接供我阅读并找到答案。我希望我的问题很明确,而且不含糊。
答案 0 :(得分:1)
两个问题。
continent
中的location.html
个网址未提供location_id
参数,您只提供了pk
。将其更改为:
<a href="{% url 'continent' location_id=location_id pk=location.pk %}">{{ location.title }}</a>
在urls.py
中,您必须在location
网址末尾添加$,否则location
和continent
网址之间会出现混淆。 $在正则表达式中具有特殊含义,意味着它要求模式匹配字符串的结尾。将网址更改为:
url(r'^accounts/location/(?P<location_id>\d+)/$', view_page_location, name='location'),
url(r'^accounts/location/(?P<location_id>\d+)/location_continent/(?P<pk>\d+)/', view_continent, name='continent')