我遇到通过URL模式传递模型对象值的问题。网址:
url(r'^cities/(?P<city>\w+)/$', 'city_firm', name='city_firm'),
在模板中(来自索引页面)我有:
<a href="{% url city_firm city %}">{{ city }}</a>
这是for
循环。
相关观点是:
def city_firm(request, city):
city1 = Cities.objects.get(city=city)
cityf = city1.Firms.all()
return render_to_response('cityfirm.html', {'cityf': cityf})
这两个模型(Cities
,Firms
)处于多对多的关系中。
我一直在TemplateSyntaxError
获得索引(NoReverseMatch while rendering: Reverse for 'city_firm' with arguments '(<Cities: >,)' and keyword arguments '{}' not found
)。在模板链接标记中,我尝试了{% url city_firm city=city %}
,{% url city_firm city=cities.city %}
。没有改变。 urlconf
部分似乎正确。问题似乎出现在模板中。也许对象的字符串值存在问题,因为它们不是英文的。但我采取了一些预防措施来防止这种情况。视图可能有问题,但错误显示模板。有什么想法吗?
解决方案:
感谢大家!最后我明白了。问题很简单:我试图通过url发送对象属性名称,其中包含非英文字符和空格。要修复它,我必须编辑我的模型。
答案 0 :(得分:2)
问题是您无法传递URL中的对象,您只能传递字符。因此,您需要将包含您想要的文本的city
对象的一部分放在URL中 - 在您的情况下,它似乎是一个也称为city
的属性,这是您使用的在查找中获取视图中的对象。所以它应该是:
<a href="{% url city_firm city.city %}">{{ city }}</a>
答案 1 :(得分:0)
我不认为name
表示您认为它的作用 - 删除它并阅读:http://docs.djangoproject.com/en/dev/topics/http/urls/#naming-url-patterns
就错误而言...... NoReverseMatch
告诉你它没有看到任何参数。请记住,不存在的模板变量会扩展为“”。当您运行该代码时,请确保city
在上下文中 - 也许在模板中发布for
?