代码之家  ›  专栏  ›  技术社区  ›  ted

如何从django中的表单获取url

  •  0
  • ted  · 技术社区  · 9 年前

    我是Django的新手,我有一个简单的问题。以下是一个视图:

    def watchmovie(request, idmovie): 
    [...]         
    return render(request, 'movies/watch_movie.html', locals())`
    

    我想创建一个简单的表单:

    将重定向到正确url的IntegerField: 如果我提交“42”,它会将我重定向到视图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 回复  |  直到 9 年前
        1
  •  1
  •   little_birdie    9 年前

    您出现该错误的原因是url标记使用错误。watchmovie视图url定义需要为idmovie提供一个参数。由于在url标记调用中没有提供任何参数,因此它只查找不需要参数的url。因为没有,所以会出现错误。

    但这只是一个症状。真正的问题是,在您构建这种结构的方式中,不存在从表单中侦听帖子的视图。

    更简单的方法是使用相同的视图来显示表单和播放电影。如果视图被GET请求命中,则显示表单。如果被POST命中,则验证表单(其中包含电影id),然后使用播放电影的页面进行响应。这样就不需要在你的url中传递idmovie。你可以从你的url定义中删除它,也不需要在标签中指定action=属性。