Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.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使用绑定表单重定向到另一个视图_Python_Django_Django Forms_Django Views_Django 1.3 - Fatal编程技术网

Python Django使用绑定表单重定向到另一个视图

Python Django使用绑定表单重定向到另一个视图,python,django,django-forms,django-views,django-1.3,Python,Django,Django Forms,Django Views,Django 1.3,我使用的是python2.7,Django 1.3.1 我正在尝试实现一个登录功能,它可以从任意页面调用并重定向到同一页面,而无需任何代码重复。目前我有两个视图:一个用于主页,另一个用于登录。我希望能够使用绑定表单从sign_视图重定向到主视图。主要问题是,当用户输入错误的数据(例如错误的密码)时,我希望重定向到同一页面,但希望发送原始表单的上下文。我希望能够在不显式调用view函数的情况下执行此操作,因为我希望能够从任意页面执行此操作。我该怎么做?我当前的尝试总是返回一个未绑定的表单,以防数据

我使用的是
python2.7
Django 1.3.1

我正在尝试实现一个登录功能,它可以从任意页面调用并重定向到同一页面,而无需任何代码重复。目前我有两个视图:一个用于主页,另一个用于登录。我希望能够使用绑定表单从sign_视图重定向到主视图。主要问题是,当用户输入错误的数据(例如错误的密码)时,我希望重定向到同一页面,但希望发送原始表单的上下文。我希望能够在不显式调用view函数的情况下执行此操作,因为我希望能够从任意页面执行此操作。我该怎么做?我当前的尝试总是返回一个未绑定的表单,以防数据无效

我当前的代码是(简化):

url.py

urlpatterns = patterns('myapp.views',
    url(r'^$', 'index', name='home'),
    url(r'sign_in/^$', 'signin', name='sign_in')
)
def index(request, loginForm=LoginForm)
    extra_context = dict()
    extra_context['login_form'] = loginForm
    return direct_to_template(request, 'home.html', extra_context=extra_context)

def signin(request)
    if request.method == 'POST':
        login_form = LoginForm(request.POST, request.FILES)
        if login_form.is_valid():
            # login user 
        redirect_view = reverse('home')
        return redirect(redirect_view, kwargs={'loginForm': login_form})
        # I also tried:  
        # return redirect(redirect_view, loginForm=login_form)
        # what works is:
        # return index(request, loginForm = login_form)
views.py

urlpatterns = patterns('myapp.views',
    url(r'^$', 'index', name='home'),
    url(r'sign_in/^$', 'signin', name='sign_in')
)
def index(request, loginForm=LoginForm)
    extra_context = dict()
    extra_context['login_form'] = loginForm
    return direct_to_template(request, 'home.html', extra_context=extra_context)

def signin(request)
    if request.method == 'POST':
        login_form = LoginForm(request.POST, request.FILES)
        if login_form.is_valid():
            # login user 
        redirect_view = reverse('home')
        return redirect(redirect_view, kwargs={'loginForm': login_form})
        # I also tried:  
        # return redirect(redirect_view, loginForm=login_form)
        # what works is:
        # return index(request, loginForm = login_form)
home.html

<form action="{% url sign_in %}" method="post">
    {{ form.as_p }}
</form>

{{form.as_p}}

不带反转。反向获取路径/我的主页/

django的范例是在初始页面使用一个隐藏的“next”变量集

#In your template
<input type="hidden" value="{{ request.path }}" name="next" />

这是持久的,因为如果出现问题,您将在/account/login/页面上显示一个带有错误的表单,并隐藏下一个变量,用户仍然可以返回到原来的位置。

这只是在成功后重定向到原始页面。我担心登录表单无效。我想重定向到与原始页面相对应的视图(是的,可以通过“next”参数获得指向该页面的链接),绑定表单指示错误。这可能很可爱,但也可能是一场灾难。如果存在错误,您不希望用户在单个页面上明确关注修复错误吗?是的。这是一个可行的解决方案,但缺点是用户被重定向到一个看起来不同的页面。我想知道失败的重定向是否可以执行到同一页面。答案似乎是否定的?如果你真的想要“相同页面”的错误,那么使用一个ajax系统,它会降级为在自己的页面上显示错误。