登录django后如何重定向到另一个app目录?

时间:2018-03-05 23:16:40

标签: django

我的django项目中有两个名为“visit”和“main”的app目录。通过访问应用程序登录用户后,如何将应用程序目录更改为另一个主要用户界面;如何从其他应用程序显示模板(请原谅我的英文)?

访问/ views.py:

from django.shortcuts import render
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login
from django.http import HttpResponseRedirect
from django import forms
from .forms import UserRegistrationForm


def index(request):
    return render(request, 'visit/index.html', context=None)


def profile(request):   # I need to change directory form here
    return render(request, 'main/templates/main/profile.html')


def registration(request):
    if request.method == "POST":
        form = UserRegistrationForm(request.POST)
        if form.is_valid():
            formObj = form.cleaned_data
            username = formObj["username"]
            name = formObj["name"]
            email = formObj["email"]
            password = formObj["password"]
            if not (User.objects.filter(username=username).exists() or User.objects.filter(email=email).exists()):
                User.objects.create_user(username, email, password)
                user = authenticate(username=username, name=name, password=password)
                login(request, user)
                return HttpResponseRedirect('/profile/')
    else:
        form = UserRegistrationForm()
    return render(request, 'visit/registration/register.html', {'form': form})

2 个答案:

答案 0 :(得分:1)

如果您将网址配置为使用命名空间,则可以执行以下操作:

HttpResponseRedirect(reverse("urlname"))

否则你可以简单地反转网址名称:

{{1}}

答案 1 :(得分:0)

首先,您应该确保在settings.py中有一个基本URL文件,该文件可以访问您所有应用中的网址。

ROOT_URLCONF = 'your_main_app.urls'

然后,在您的主urls.py中,您可以收集每个应用的所有网址

urlpatterns = [
    url(r'^some_path/', include('some_app.urls')),
    url(r'^another_path/', include('some_other_app.urls')),
    ...,
]

确保您还设置了模板目录结构。

TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [os.path.join(BASE_DIR, "templates")],
    'APP_DIRS': True,
    'OPTIONS': {
        'context_processors': [
            'django.template.context_processors.debug',
            'django.template.context_processors.request',
            'django.contrib.auth.context_processors.auth',
            'django.contrib.messages.context_processors.messages',
        ],
    },
},

这允许您的项目浏览每个应用程序的模板文件夹。然后,您可以在目录中设置所有模板

main_project_directory
    |--visit
        |--templates
           |--visit
              |--index.html
    |--main
        |--templates
           |--main
              |--profile.html

然后,每次你去参考一个模板 - 你可以称之为

template_name='app_name/template_name.html'

在你的情况下

def profile(request):  
    return render(request, 'main/profile.html')

所以你要避免两次使用相同的模板结构,并且调用/跟踪正在使用的模板会更容易。