如何从django

时间:2015-07-29 22:19:44

标签: django forms

我是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+)$']

谢谢!

1 个答案:

答案 0 :(得分:1)

您收到该错误的原因是您的网址标记使用错误。您的watchmovie视图网址定义需要为idmovie提供参数。由于您未在url标记调用中提供任何参数,因此它仅查找不需要参数的URL。由于没有,你会收到错误。

但这只是一种症状。真正的问题是,你有这种结构的方式是没有视图从你的表单中收听帖子。

更简单的结构方法是使用相同的视图来显示表单和播放电影。如果您的视图是使用GET请求命中的,请显示该表单。如果使用POST命中,请验证表单(将包含影片ID),然后使用播放影片的页面进行响应。这样就不需要在你的网址中传递idmovie ..你可以从网址定义中删除它,也不需要在你的标签中指定action =属性......它只会发回到它的来源。