【问题标题】:TemplateDoesNotExist at /users/profile//users/profile/ 中的 TemplateDoesNotExist
【发布时间】:2020-05-07 23:49:08
【问题描述】:

我正在尝试制作个人资料页面,这只是一个包含用户详细信息的页面,例如名字、姓氏、电子邮件等。但我认为我的视图或我的 url.py 或我的设置有问题,这给了我 /users/profile/ (users/profile.html) 的 TemplateDoesNotExist 错误。不过其他页面运行良好。

这是我的回溯:

文件“/Documents/morse_log/m_env/lib/python3.7/site-packages/django/core/handlers/exception.py”,第 34 行,内部响应 = get_response(request)

文件“/Documents/morse_log/m_env/lib/python3.7/site-packages/django/core/handlers/base.py”,第 115 行,在 _get_response 响应 = self.process_exception_by_middleware(e,请求)

*文件“/Documents/morse_log/m_env/lib/python3.7/site-packages/django/core/handlers/base.py”,第 113 行,在 _get_response response = Wrapped_callback(request, *callback_args, ** callback_kwargs)*

文件“/Documents/morse_log/users/views.py”,第 32 行,在 profile return render(request, 'users/profile.html', args)

文件“/Documents/morse_log/m_env/lib/python3.7/site-packages/django/shortcuts.py”,第 19 行,在渲染内容 = loader.render_to_string(template_name, context, request, using =使用)

文件“/Documents/morse_log/m_env/lib/python3.7/site packages/django/template/loader.py”,第 61 行,在 render_to_string template = get_template(template_name, using=using) em>

文件“/Documents/morse_log/m_env/lib/python3.7/site-packages/django/template/loader.py”,第 19 行,在 get_template 中引发 TemplateDoesNotExist(template_name,chain=chain) em>

异常类型:TemplateDoesNotExist at /users/profile/ 异常值:users/profile.html

settings.py:

INSTALLED_APPS = [
    # My apps
    'morse_logs',
    'users',

    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        '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',
            ],
        },
    },
]

/users/urls.py:

from django.urls import path, include
from django.contrib.auth.models import User

from . import views


app_name = 'users'

urlpatterns = [
    # Include default auth urls.
    path('', include('django.contrib.auth.urls')),

    # Registration
    path(r'/register/', views.register, name='register'),
    path(r'/profile/', views.profile, name='profile'),

]

/users/profile.html:

{% block content %}
<title>Profile</title>
<div class="container">
    <p>
        {{user}}
        {{user.first_name}}
    </p>
</div>

{% endblock %}

用户/views.py:

from django.shortcuts import render, redirect
from django.contrib.auth import login
from django.contrib.auth.forms import UserCreationForm
from users.forms import RegistrationForm
from django.contrib.auth import views as auth_views
from django.contrib.auth.models import User


# Create your views here.
def register(request):
    """Register a new user"""
    if request.method != 'POST':
        # Display blank registration form
        form = RegistrationForm()
    else:
        # Process completed form
        form = RegistrationForm(data=request.POST)

        if form.is_valid():
            new_user = form.save()
            # Log the user in and then redirect to home page
            login(request, new_user)
            return redirect('morse_logs:index')

    # Display a blank or invalid form.
    context = {'form': form}
    return render(request, 'registration/register.html', context)


def profile(request):
    args = {'user': request.user}
    return render(request, 'users/profile.html', args)

用户/model.py: (在我的文本编辑器中,它说未使用“发件人”值, 未解决的属性引用类 UserProfile 的“对象”)

from django.db import models
from django import forms
from django.contrib.auth.models import User
from django.db.models.signals import post_save

# Create your models here.


class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    description = models.CharField(max_length=100, default='')


def create_profile(sender, **kwargs):
    if kwargs['created']:
        user_profile = UserProfile.objects.create(user=kwargs['instance'])

    post_save.connect(create_profile, sender=User)

forms.py:

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm


class RegistrationForm(UserCreationForm):
    email = forms.EmailField(required=True)

    class Meta:
        model = User
        fields = (
            'username',
            'first_name',
            'last_name',
            'email',
            'password1',
            'password2'
        )

    def save(self, commit=True):
        user = super(RegistrationForm, self).save(commit=False)
        user.first_name = self.cleaned_data['first_name']
        user.last_name = self.cleaned_data['last_name']
        user.email = self.cleaned_data['email']

        if commit:
            user.save()

        return user

【问题讨论】:

    标签: django django-models django-templates django-views


    【解决方案1】:

    需要在模板列表中添加模板目录:

    'DIRS': [os.path.join(BASE_DIR, 'templates')]  
    

    所以替换下面的 TEMPLATES 列表。

    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',
                    ],
                },
            },
        ]
    

    并按以下格式创建模板:

          users  
            ----|templates
                   ----|users
                      -----|profile.html 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-25
      • 2018-09-27
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      • 2017-09-25
      • 1970-01-01
      • 2022-01-11
      相关资源
      最近更新 更多