2015-08-26 4 views
1

Я знаю, что это распространенная проблема, видимо, но я прошел кучу примеров и не могу найти решение.Django: TemplateDoesNotExist. Пробовал много разных вещей уже

Я делаю учебник по django1.8. поэтому я не уверен, что это сбой или нет. Я попытался переместить файл шаблона в несколько местоположений, но пока ничего не получилось.

У меня есть проект, структурированный таким образом: мой проект называется «forumtest», и он находится внутри виртуального, называемого «venv». В Forumtest есть одно приложение под названием «опросы». У меня была папка «шаблоны», хранящаяся в корневом каталоге «forumtest», но я просто переместил ее в каталог «опросы». Однако я получил тот же результат.

В настоящее время, мой settings.py файл выглядит следующим образом:

""" 
Django settings for forumtest project. 

Generated by 'django-admin startproject' using Django 1.8.3. 

For more information on this file, see 
https://docs.djangoproject.com/en/1.8/topics/settings/ 

For the full list of settings and their values, see 
https://docs.djangoproject.com/en/1.8/ref/settings/ 
""" 

# Build paths inside the project like this: os.path.join(BASE_DIR, ...) 
import os 

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


# Quick-start development settings - unsuitable for production 
# See https://docs.djangoproject.com/en/1.8/howto/deployment/checklist/ 

# SECURITY WARNING: keep the secret key used in production secret! 
SECRET_KEY = '$nnwkm0ln!$77m1n!%wv-5)k_rhs=-p-)xr-c-+m985w3jq#*=' 

# SECURITY WARNING: don't run with debug turned on in production! 
DEBUG = True 

ALLOWED_HOSTS = [] 


# Application definition 

INSTALLED_APPS = (
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'polls', 
) 

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
    'django.middleware.security.SecurityMiddleware', 
) 

ROOT_URLCONF = 'forumtest.urls' 

TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'DIRS': [os.path.join (BASE_DIR,'C:/Desktop/Users/Owner/forumtest/polls/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', 
      ], 
     }, 
    }, 
] 

WSGI_APPLICATION = 'forumtest.wsgi.application' 


# Database 
# https://docs.djangoproject.com/en/1.8/ref/settings/#databases 

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': 'forumtest', 
     'USER': 'admin', 
     'PASSWORD': 'aldotheapache12', 
     'HOST': 'localhost', 
     'PORT': '', 
    } 
} 


# Internationalization 
# https://docs.djangoproject.com/en/1.8/topics/i18n/ 

LANGUAGE_CODE = 'en-us' 

TIME_ZONE = 'UTC' 

USE_I18N = True 

USE_L10N = True 

USE_TZ = True 


# Static files (CSS, JavaScript, Images) 
# https://docs.djangoproject.com/en/1.8/howto/static-files/ 

STATIC_URL = '/static/' 

В разделе 'DIRS', который выглядит следующим образом:

'DIRS': [os.path.join (BASE_DIR,'C:/Desktop/Users/Owner/forumtest/polls/templates')], 

Ранее выглядел следующим образом:

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

Мой файл представлений, хранящихся в каталоге «forumtest», выглядит так:

from django.shortcuts import render,get_object_or_404 
from django.http import HttpResponseRedirect,HttpResponse 
from django.core.urlresolvers import reverse 
from django.views import generic 

from polls.models import Choice,Question 

# Create your views here. 
class IndexView(generic.ListView): 
    template_name = 'index.html' 
    context_object_name = 'latest_question_list' 

    def get_queryset(self): 
     """Return the last five published questions""" 
     return Question.objects.order_by('-pub_date')[:5] 

class DetailView(generic.DetailView): 
    model = Question 
    template_name = 'polls/detail.html' 

class ResultsView(generic.DetailView): 
    model = Question 
    template_name = 'polls/results.html' 

def vote(request,question_id): 
    p = get_object_or_404(Question, pk=question_id) 
    try: 
     selected_choice = p.choice_set.get(pk=request.POST['choice']) 
    except(KeyError,Choice.DoesNotExist): 
     #redisplay the question voting form 
     return render(request,'polls/detail.html',{ 
      'question':p, 
      'error_message': "you didn't select a choice.", 
     }) 
    else: 
     selected_choice.votes += 1 
     selected_choice.save() 
     # Always return an HttpResponseRedirect after successfully dealing 
     # with POST data. This prevents data from being posted twice if a 
     # user hits the Back button. 
     return HttpResponseRedirect(reverse('polls:results', args=(p.id,))) 

У меня есть точно такие же взгляды файл под «выборы», за исключением этой линии (я знаю, что это может быть проблемой:

from .models import Choice,Question 

Пожалуйста, дайте мне знать, как я могу решить эту проблему , Спасибо, парни!

EDIT: в соответствии с просьбой McGinlay @ Крис, вот шаблон загрузчика Посмертное:

Django tried loading these templates, in this order: 
Using loader django.template.loaders.filesystem.Loader: 
C:\Users\Owner\Desktop\venv\forumtest\templates\index.html, polls\question_list.html (File does not exist) 
Using loader django.template.loaders.app_directories.Loader: 
C:\Users\Owner\Desktop\venv\lib\site-packages\django\contrib\admin\templates\index.html, polls\question_list.html (File does not exist) 
C:\Users\Owner\Desktop\venv\lib\site-packages\django\contrib\auth\templates\index.html, polls\question_list.html (File does not exist) 
C:\Users\Owner\Desktop\venv\forumtest\polls\templates\index.html, polls\question_list.html (File does not exist) 

Спасибо за все ваши комментарии, парни!

EDIT: Я удалил дополнительный файл видом, расположенный под 'forumtest/forumtest' директории, и теперь я получаю сообщение об ошибке:

cannot import name 'views' 

:(

EDIT: @Alasdair вот файл корень urls.py:

from django.conf.urls import include, url 
from django.contrib import admin 

from . import views 


urlpatterns = [ 
    # ex: /polls/ 
    url(r'^$', views.IndexView.as_view(), name='index'), 
    url(r'^polls/', include('polls.urls',namespace="polls")), 
    url(r'^admin/', include(admin.site.urls)), 
] 
+0

Имеет ли значение «невозможно импортировать имя« представления »в корневой каталог urls.py? Я подозреваю, что это так, потому что у вас есть «от». импорт. Точка означает импорт из того же каталога, что и файл urls.py, но если вы посмотрите, вы обнаружите, что ваш файл views.py находится не в этом каталоге, он (или должен быть) в polls/views.py, поэтому вы должны использовать 'from polls import views' в корневой urls.py. «От. import views' будет тем, что вы поставили бы в опросах/urls.py. –

+0

@Chris McGinlay Я сделал это, и теперь я получаю сообщение об ошибке «TemplateDoesNoteExist at/polls /», а ниже он перечисляет «index.html, polls/question_list.html». Я просто понял, что у меня нет этих html-файлов, поэтому он вызывает файлы, которые на самом деле не там, ха-ха. Я создам их и посмотрю, устранит ли это проблему :) – NotInternetExplorer

ответ

-1

Попробуйте это:

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

INSTALLED_APPS = (
... 
    'polls', 
) 

TEMPLATE_PATH = os.path.join(BASE_DIR, 'templates') 

TEMPLATE_DIRS = (
    TEMPLATE_PATH, 
) 

с этими шаблонами должен быть внутри «опросы/шаблоны» каталог или в основном «шаблоны» каталог

+0

Это старые настройки шаблона. OP использует Django 1.8, который имеет новую настройку 'TEMPLATES'. – Alasdair

+0

Я использую его в django 1.8.4 без каких-либо проблем. Вы можете, по крайней мере, попробовать это, чтобы проверить, исправлена ​​ли проблема, а затем следующим шагом будет переход на новую конфигурацию. – nixdaemon

+0

Да, вы можете использовать старые настройки в 1.8, но вы не должны смешивать новые и старые настройки. Поскольку OP уже использует 'TEMPLATES', они ничего не получают, переключаясь на старые настройки. – Alasdair

2

Вы не должны включать каталог опросов в вашей обстановке DIRS. Django найдет его, потому что у вас есть APP_DIRS, установленный на True.

Таким образом, вы можете изменить DIRS назад.

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

Теперь, обратите внимание, что должно быть polls каталога внутри polls/templates, например, деталь шаблон должен быть polls/templates/polls/details.html.

Наконец, придерживайтесь учебника и сохраняйте просмотры опросов в polls/views.py. Имея два похожих файла forumtest/views.py и polls/views.py, вы будете делать вещи очень запутанными.

+0

У меня уже есть список опросов в файле 'polls/templates'. Да, я согласен с вами в отношении взглядов, как только я это заметил, я чувствовал проблемы с входящими сообщениями. Проблема заключается в том, что в руководстве не было четко указано размещение файлов представлений :( – NotInternetExplorer

+0

Чтобы решить проблему импорта, пожалуйста, покажите свой корневой urls.py. Обратите внимание, что вы должны иметь 'template_name = 'polls/index.html'' для согласования с вашими другими представлениями. – Alasdair

3

Я думаю, что шаблоны DIRS в настройке ШАБЛОНЫ должно быть, как это было:

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

Имея 'APP_DIRS': True, должны тянуть в шаблонах из всех ваших приложений.

Когда вы получаете страшился «TemplateDoesNotExist в ...» сообщение в вашем браузере, это, вероятно, поможет взглянуть вниз на Шаблон Loader некропсический:

Джанго попытался загрузки этих шаблонов, в этом порядке :

Надеюсь, это даст некоторые подсказки - не могли бы вы разместить его здесь?

+0

+1 «Django попытался загрузить эти шаблоны в этом порядке» должен содержать необходимую информацию для решения проблемы. – Alasdair

+0

@ChrisMcGinlay Я изменил «DIRS», чтобы иметь только «шаблоны». – NotInternetExplorer

0

Если у вас такая же проблема, откройте этот файл в finder или вне текстового редактора/IDE и переименуйте его, также проверьте расширение.

Смежные вопросы