Django:通过url传递模型对象值

时间:2010-12-15 07:09:32

标签: django django-urls django-templates

我遇到通过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})

这两个模型(CitiesFirms)处于多对多的关系中。 我一直在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发送对象属性名称,其中包含非英文字符和空格。要修复它,我必须编辑我的模型。

2 个答案:

答案 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