Django注册:登录后重定向

时间:2012-08-24 12:59:53

标签: django django-urls django-generic-views

我正在使用django注册,我希望在登录后重定向到其他页面。 我在settings.py中使用:

LOGIN_REDIRECT_URL = 'http://127.0.0.1:8000/home/'

那是我想要重定向到的页面。

我成功重定向。但页面主页必须显示我的数据库中的一些元素,并且没有任何内容。这些元素存在于db(我已检查过)中。

请问好吗? TY

我的第一个url conf(django的url conf)=> urls.py

urlpatterns = patterns('',
    url(r'^accounts/', include('dashboard.registration.backends.simple.urls')),
    url(r'^home/$', direct_to_template,{ 'template': 'index.html' }, 'index'),
url(r'^home/', include(dashboard.home.urls)),
url(r'^admin/', include(admin.site.urls)),
)

我的第二个网址(dashboard.home.urls)

urlpatterns = patterns('dashboard.home.views',
    url(r'^$',index,name='index'),
)

我在dashboard.home.views中的索引请求

def index(request):
    print 'index request'
    project_list = Project.objects.all().order_by('project_name')
    return render_to_response('index.html',{'project_list': project_list})

我的模板index.html

<body>
{% if user.is_authenticated %}
    <p>Welcome, {{ user.username }}. Thanks for logging in.</p>

    <h3>Home</h3>
    <ul>
    <li><a href="Add_Project/">Add a Project</a></li>

    </ul>

    <h3>Project list</h3>
    {% if project_list %}
        <ul>
        {% for project in project_list %}
            <li> <a href={{project.project_name}}>{{ project.project_name }}</a></li>
        {% endfor %}
        </ul>
    {% else %}
        <p>There are no Projects</p>
    {% endif %} 

{% else %}
    <p>Welcome, new user. Please log in.</p>
{% endif %}
</body> 

我的settings.py

LOGIN_REDIRECT_URL = 'http://127.0.0.1:8000/home/'

1 个答案:

答案 0 :(得分:2)

url(r'^home/$', direct_to_template,{ 'template': 'index.html' }, 'index'),
url(r'^home/', include(dashboard.home.urls)),

Django将在第一场比赛中停止,因此如果网址为/home/,则不会调用其他包含网址。只有第一个模式匹配,并且会显示index.html

您还应该传递RequestContext,最简单的方法是使用render快捷方式。

from django.shortcuts import render

def index(request):
    project_list = Project.objects.all().order_by('project_name')
    return render(request,'index.html',{'project_list': project_list})

此外,请确保您尚未从"django.contrib.auth.context_processors.auth"中删除TEMPLATE_CONTEXT_PROCESSORS(默认情况下,除非您将其删除)。

编辑:

  

我试过,我有项目列表,因为我在控制台上打印它。但是我   我的页面上没有项目列表。

只有拥有有效用户才能打印项目列表;如果您以访客身份登录,那么您的项目列表将不会打印任何内容。

尝试将此作为模板:

<body>
{% if user.is_authenticated %}
    <p>Welcome, {{ user.username }}. Thanks for logging in.</p>
{% else %}
    <p>Welcome, new user. Please log in.</p>
{% endif %}

    <h3>Home</h3>
    <ul>
    <li><a href="Add_Project/">Add a Project</a></li>

    </ul>

    <h3>Project list</h3>
    {% if project_list %}
        <ul>
        {% for project in project_list %}
            <li> <a href={{project.project_name}}>{{ project.project_name }}</a></li>
        {% endfor %}
        </ul>
    {% else %}
        <p>There are no Projects</p>
    {% endif %} 

</body> 

并调整index方法:

from django.shortcuts import render
from django.contrib.auth.decorators import login_required

@login_required
def index(request):
    project_list = Project.objects.all().order_by('project_name')
    return render(request,'index.html',{'project_list': project_list})