我是Django的新手,我有一个简单的问题。这是一个观点:
def watchmovie(request, idmovie):
[...]
return render(request, 'movies/watch_movie.html', locals())`
我想创建一个简单的表单:
将重定向到正确网址的IntegerField: 如果我提交“42”,它会将我重定向到view watchmovie,参数42为idmovie。
我该怎么做?
我尝试了类似的东西
<form action="{% url "movies.views.watchmovie" %}" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" />
</form>
我的url.py是
from django.conf.urls import patterns, url
urlpatterns = patterns(
'movies.views',
url(r'^movie/(?P<idmovie>\d+)$', 'watchmovie'),
)
和Django说
Reverse for 'movies.views.watchmovie' with arguments '()' and keyword arguments '{}' not found. 1 pattern(s) tried: ['movies/movie/(?P<idmovie>\\d+)$']
谢谢!
答案 0 :(得分:1)
您收到该错误的原因是您的网址标记使用错误。您的watchmovie视图网址定义需要为idmovie提供参数。由于您未在url标记调用中提供任何参数,因此它仅查找不需要参数的URL。由于没有,你会收到错误。
但这只是一种症状。真正的问题是,你有这种结构的方式是没有视图从你的表单中收听帖子。
更简单的结构方法是使用相同的视图来显示表单和播放电影。如果您的视图是使用GET请求命中的,请显示该表单。如果使用POST命中,请验证表单(将包含影片ID),然后使用播放影片的页面进行响应。这样就不需要在你的网址中传递idmovie ..你可以从网址定义中删除它,也不需要在你的标签中指定action =属性......它只会发回到它的来源。