我的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})
答案 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')
所以你要避免两次使用相同的模板结构,并且调用/跟踪正在使用的模板会更容易。