【问题标题】:Django: Passing model object values through urlDjango:通过url传递模型对象值
【发布时间】:2011-05-25 18:06:10
【问题描述】:

我在通过 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 '(&lt;Cities: &gt;,)' and keyword arguments '{}' not found)。在我尝试的模板链接标签中:{% url city_firm city=city %}{% url city_firm city=cities.city %}。没有改变。 urlconf 部分似乎是正确的。问题似乎出在模板中。对象的字符串值可能存在问题,因为它们不是英文的。但是我采取了一些预防措施来防止这种情况发生。视图可能有问题,但错误显示模板。有什么想法吗?

解决方案
感谢大家!最后我想通了。问题很简单:我试图通过包含非英文字符和空格的 url 发送对象属性名称。为了修复它,我不得不编辑我的模型。

【问题讨论】:

  • 尝试发送city.city而不是city
  • 如果您解决了自己的问题,请将其作为答案提供并接受

标签: django django-urls django-templates


【解决方案1】:

问题是你不能在 URL 中传递对象,你只能传递字符。因此,您需要将包含您希望在 URL 中的文本的 city 对象的部分放在 URL 中 - 在您的情况下,它似乎是一个也称为 city 的属性,这是您在查找中使用的获取视图中的对象。所以应该是:

<a href="{% url city_firm city.city %}">{{ city }}</a>

【讨论】:

  • 不幸的是,确实没有办法传递一个对象,以便 url 解析来自该对象的预期关键字。我在 Django 中找不到任何这样做的应用程序。
【解决方案2】:

我不认为 name 意味着你认为它的作用 - 删除它并阅读以下内容:http://docs.djangoproject.com/en/dev/topics/http/urls/#naming-url-patterns

就错误而言...NoReverseMatch 告诉您它没有看到任何参数。请记住,不存在的模板变量扩展为“”。当您运行该代码时,确保city 在上下文中 - 也许在模板中发布for

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-31
    相关资源
    最近更新 更多