Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django——在一种观点中,我该如何做;返回render/Httpresponse/etc“;换个角度看?_Python_Django - Fatal编程技术网

Python Django——在一种观点中,我该如何做;返回render/Httpresponse/etc“;换个角度看?

Python Django——在一种观点中,我该如何做;返回render/Httpresponse/etc“;换个角度看?,python,django,Python,Django,比如说我有一个叫做addPost的视图(就像一个墙柱)。这是一个post对象的模型表单页面。有两种情况,request.method是post,或者不是。如果是POST方法,我希望在提交POST后返回到profile页面 我有过几次这样的问题,它通常以NoReverseMatch错误的形式出现 如何将render/Httpresponse/etc“返回”到另一个视图?在Django?我觉得我以前使用过的任何解决方案都是非常粗糙的,我想知道实现这种特性的正确方法 我想指出的是,我在myapp/pr

比如说我有一个叫做addPost的视图(就像一个墙柱)。这是一个post对象的模型表单页面。有两种情况,request.method是post,或者不是。如果是POST方法,我希望在提交POST后返回到profile页面

我有过几次这样的问题,它通常以NoReverseMatch错误的形式出现

如何将render/Httpresponse/etc“返回”到另一个视图?在Django?我觉得我以前使用过的任何解决方案都是非常粗糙的,我想知道实现这种特性的正确方法

我想指出的是,我在myapp/profile.html上遇到了这个错误

{% if user == currUser %}

                  <a href="
      {% url 'addpost' %}
      " class = "btn btn-info"> <span class="glyphicon glyphicon-plus"></span></a>


 {% endif %}
这是我的追踪记录:

NoReverseMatch at /myapp/profile/1/
Reverse for 'addpost' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
Request Method: GET
Request URL:    http://127.0.0.1:8000/myapp/profile/1/
Django Version: 1.8.2
Exception Type: NoReverseMatch
Exception Value:    
Reverse for 'addpost' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
Exception Location: /Library/Python/2.7/site-packages/django/core/urlresolvers.py in _reverse_with_prefix, line 496
Python Executable:  /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python
Python Version: 2.7.8
Python Path:    
['/Users/me/project',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/setuptools-18.0.1-py2.7.egg',
 '/Library/Python/2.7/site-packages/pip-1.5.6-py2.7.egg',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages',
 '/Library/Python/2.7/site-packages']
Server time:    Tue, 14 Jul 2015 08:12:13 +0000
它出现在html中的这一行代码中,该按钮链接到add_post视图

profile.html

{% if user == currUser %}

                  <a href="
      {% url 'addpost' %}
      " class = "btn btn-info"> <span class="glyphicon glyphicon-plus"></span></a>


 {% endif %}
这是两个视图,profile和add_post

@login_required
def profile(request, id):
    context = RequestContext(request)
    currUser = User.objects.get(pk = id)
    profile = UserProfile.objects.filter(user = currUser)
    return render_to_response('myapp/profile.html', {'currUser': currUser}, context)

@login_required
@login_required
def add_post(request):
    context = RequestContext(request)
    if request.method == 'POST':
    #     #create a form instance and populate it with data from the request
        form = PostForm(request.POST)
        if form.is_valid():
             #process data in form.clean_data
            post = Post(user = request.user, title =form.cleaned_data['title'], body=form.cleaned_data['body'])
            post.save()
            return redirect(reverse('myapp/profile', args=[request.user.pk]))


    else:
        form=PostForm()

    return render_to_response('myapp/addpost.html', {'form': form}, context )
url.py

urlpatterns = patterns(
    '',
    ...
    url(r'^profile/(?P<id>\d+)/$', views.profile, name='profile'),
    url(r'^addpost/$', views.add_post, name='add_post'),

)
urlpatterns=patterns(
'',
...
url(r“^profile/(?P\d+/$”,views.profile,name='profile'),
url(r“^addpost/$”,views.add_post,name='add_post'),
)

只需重定向,无需执行
呈现到\u响应

from django.shortcuts import redirect
from django.core.urlresolvers import reverse

@login_required
def add_post(request):
    ....
    if form.is_valid():
        ....
        return redirect(reverse('profile', args=[request.user.pk]))

你把问题误诊了。这与重定向无关;它发生在模板本身中,因为您使用了
{%url'addpost%%}
而不是
{%url'add_post%%}

在发布成功后重定向到新视图。只需在发布成功后重定向(reverse('profile',args=[request.user.pk])。它仍然不起作用。为了获得更多信息,我编辑并更新了上面的帖子。我得到了同样的反向错误。好的,我去掉了这个错误。我不得不把{%url'myapp:add_post%}放进去。这是一个愚蠢的错误。