Джанго: Почему некоторые шаблоны не обнаружены? - PullRequest
2 голосов
/ 25 марта 2019

Джанго новичок здесь. Я работаю над проектом с парой приложений и, таким образом, сохранил свои шаблоны на уровне моего проекта. Теперь проблема заключается в том, что некоторые шаблоны не обнаруживаются по соответствующим URL-адресам. Например, шаблон (property_list.html), соответствующий списку свойств, точно обнаруживается по соответствующему URL (/properties), в то время как property_detail.html и property_new.html, соответствующие properties/new и properties/[insert property ID], соответственно, не обнаруживаются. Просто для записи, дома, зарегистрироваться, войти в систему работать просто отлично.

Я смотрел похожие случаи, как здесь, так и в других местах, но, кажется, ничто не указывает мне направление, которое я хочу. Итак, что дает?

Скриншот структуры шаблона находится на связанном изображении ниже. Опять же, папка находится на уровне root / project.

Структура шаблона

enter image description here

Настройки проекта (раздел шаблона)

# ...
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# ...

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

# ...

URL проекта

from django.contrib import admin
from django.urls import path, include
from .views import HomePageView

urlpatterns = [
    path('', HomePageView.as_view(), name='home'),
    path('admin/', admin.site.urls),
    path('accounts/', include('allauth.urls')),
    path('agencies/', include('agencies.urls')),
    path('properties/', include('properties.urls')),
]

Свойства URL

from django.urls import path
from . import views

urlpatterns = [
        path('', views.PropertyListView.as_view(), name='property_list'),
        path('new/', views.PropertyCreateView.as_view(), name='property_new'),
        path('<slug:pk>/', views.PropertyDetailView.as_view(), name='property_detail'),
]

Свойства Просмотров

from django.views.generic import ListView, DetailView
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.contrib.auth.mixins import LoginRequiredMixin
from django.urls import reverse_lazy

from .models import Property

# Create your views here.
class PropertyListView(ListView):
        model = Property
        template_name = 'property_list.html'

class PropertyDetailView(DetailView):
        model = Property
        template_name = 'property_detail.html'

class PropertyCreateView(LoginRequiredMixin, CreateView):
        model = Property
        template_name = 'property_new.html'
        fields = [
                'property_type', 
                'is_for_sale', 
                'cost', 
                'location', 
                'num_of_bedrooms', 
                'num_of_bathrooms', 
                'num_of_parking_spaces', 
                'num_of_garages',
                'has_pool',
                'has_waterfront',
                'has_elevator',
                'added_on',
        ]

        login_url = 'login'

        def form_valid(self, form):
                form.instance.author = self.request.user
                return super().form_valid(form)

# class PropertyUpdateView(LoginRequiredMixin, UpdateView):
#       model = Property
#       fields = ['title', 'body', ]
#       template_name = 'property_edit.html'
#       login_url = 'login'

# class PropertyDeleteView(LoginRequiredMixin, DeleteView):
#       model = Property
#       template_name = 'property_delete.html'
#       success_url = reverse_lazy('property_list')
#       login_url = 'login'
#       

Ответы [ 2 ]

1 голос
/ 25 марта 2019

Поскольку в ваших настройках у вас есть 'DIRS': [(os.path.join(BASE_DIR, 'templates'))], то по умолчанию django ищет имена файлов в каталоге с именем "templates" в вашем корне.

В вашей структуре каталогов шаблонов вы добавили еще один каталог с именем properties, который включает property_list.html, поэтому, чтобы view нашел шаблон, вы должны указать относительный путь, начиная с template каталога.

template_name = 'properties/property_list.html'
template_name = 'properties/property_new.html'

Наслаждайтесь.

0 голосов
/ 26 марта 2019

Стандарт Django - это создание папки «шаблоны» для каждого вашего приложения.

Эта папка шаблонов должна содержать еще одну папку, которая называется именем приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...