我一直在尝试让 django 渲染我创建的模板。起初它说模板不存在,但是一旦我修复了错误,它现在就会向路径添加字符,并且因此找不到模板。
路径应该是:
C:\\Users\\ABC\\Desktop\\science_crowd\\Lightweight_Django\\placeholder\\home.html
但是错误说:它找不到:
C:\\Users\\Benjamin\\Desktop\\science_crowd\\Lightweight_Django\\placeholder\\:\\home.html
它无缘无故地添加了一个冒号和另一个反斜杠。
该项目的设置如下:
ALLOWED_HOSTS = os.environ.get('ALLOWED_HOSTS', '127.0.0.1').split(',')
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
settings.configure(
DEBUG = DEBUG,
SECRET_KEY = SECRET_KEY,
ALLOWED_HOSTS = ALLOWED_HOSTS,
ROOT_URLCONF = __name__,
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
),
INSTALLED_APPS = (
'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': os.path.join(BASE_DIR, 'templates'),
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
"django.contrib.auth.context_processors.auth",
],
},
},
],
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
),
STATIC_URL = '/static/',
)
尝试渲染模板的视图:
def index(request):
example = reverse('placeholder', kwargs = {'width': 50, 'height': 50})
context = {
'example': request.build_absolute_uri(example)
}
dir = os.path.join(BASE_DIR, 'templates')
return render(request, 'home.html', context = context)
非常感谢您的帮助!
问题出在的
TEMPLATES
设置的
DIRS
部分。正在使用
os.path.join(BASE_DIR, 'templates')
,它在 Windows 上会产生一个带有冒号的路径(例如
C:\Users\ABC\Desktop\science_crowd\Lightweight_Django\placeholder:\templates
)。
要解决此问题,请在使用
os.path.join
之前将
BASE_DIR
转换为字符串:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [str(os.path.join(BASE_DIR, 'templates'))], # 将路径转换为字符串
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
"django.contrib.auth.context_processors.auth",
],
},
},
]
通过将路径转换为字符串,将避免 Windows 路径中的冒号问题,并且 Django 将能够正确找到的模板。
标签:python,django,path From: 44490210