将多个参数传递给模板时出现NoReserveMatch错误

时间:2013-08-20 23:20:35

标签: django

我收到NoReverseMatch错误:

Reverse for 'state' with arguments '('', '')' and keyword arguments '{}' not found.

我有2个ID传递给模板,这似乎是问题所在。

views.py

def state(request, country_id, state_id):
    countrystate = State.objects.all()
    return render_to_response("template.html", {'countrystate': countrystate}) 

urls.py

url(r'^my_index/(?P<country_id>\d+)/$', 'my_App.views.main', name='main'),
url(r'^my_index/(?P<country_id>\d+)/value/$', 'my_App.views.value', name='value'),
url(r'^my_index/(?P<country_id>\d+)/option/$', 'my_App.views.option', name='option'),
url(r'^my_index/(?P<country_id>\d+)/state/$', 'my_App.views.country', name='country'),
url(r'^my_index/(?P<country_id>\d+)/state/(?P<state_id>\d+)/$', 'my_App.views.state', name='state'),

template.html

{% load url from future %}
<form class="option_form" action="{% url "state" country.id state.id %}" method="post">

任何想法?

编辑: 我所拥有的是国家和州的名单。所以在其他模板中,我可以从列表中选择一个国家,然后我可以从该国家中选择一个州。这就是我现在所处的位置。在选择我的状态之后,我正在尝试渲染上面的模板但是我得到了一个noreversematch。 state.id和country.ids在url中。我只能使用country.id做到这一点,但不能同时使用country和state.id。

2 个答案:

答案 0 :(得分:1)

尝试类似以下的视图:

def state(request, country_id, state_id):
    my_state = State.objects.all()[0]
    my_country = Country.objects.all()[0]
    return render_to_response("template.html", {'state': my_state, 'country': my country })

上述功能是荒谬的,但不应产生错误。

如果您通过网页上的某个选择工具定义国家/地区和州,则

它永远不会起作用,因为它会在进入用户浏览器之前进行评估。

我并不是说你不能让表单工作,只是这种方法是错误的。

答案 1 :(得分:0)

当您只使用1个参数时,是否使用了my_App.views.country?尝试颠倒最后2个网址的顺序......

url(r'^my_index/(?P<country_id>\d+)/state/(?P<state_id>\d+)/$', 'my_App.views.state', name='state'),
url(r'^my_index/(?P<country_id>\d+)/state/$', 'my_App.views.country', name='country'),