Джанго добавляет двоеточие к пути из ниоткуда

У меня есть довольно простой проект Django, основанный на проекте из учебника, который я медленно превращаю в свое собственное приложение. Локально работал нормально. Я попытался развернуть его на Heroku, поэтому внес несколько изменений, но локально он по-прежнему работал нормально (я все еще работаю над тем, чтобы заставить его работать на Heroku). Но потом я запустил его еще раз и из ниоткуда я получаю эту ошибку:

Invalid argument: 'C:\\Users\\cusack\\PycharmProjects\\pythonProject\\website\\:\\index.html'

Так что по какой-то причине он добавляет :\\ или \\: к пути. Я просмотрел settings.py, views.py, urls.py и нигде не могу найти, где я сказал это сделать. Мой файл urls.py выглядит (частично) так:

urlpatterns = [
    path('', views.index, name='index'),
    path('images/random.png',views.my_image,name='randomImage'),
    path('admin/', admin.site.urls)
]

И главная страница, и администратор выдают эту ошибку, но «images/random.png» работает нормально. Для страницы администратора добавляется дополнительный :\\ перед admin\\index.html.

Мой views.py для этого индекса тривиален:

def index(request):
    return render(request, 'index.html')

Это произошло, когда я играл с DEBUG и ALLOWED_HISTS, хотя изменение их обратно на True и [] не помогло.

Любая идея, откуда это может исходить?

ОБНОВЛЕНИЕ: похоже, причина в этой строке в настройке ШАБЛОНОВ: 'DIRS': os.path.join(BASE_DIR, '../templates'), Это работало нормально, когда это было: 'DIRS': [BASE_DIR / 'templates'], но иногда это не работает (я не понимаю, но иногда это работает, в других случаях он говорит, что не знает, как делить строки). Поэтому я не могу изменить его обратно и не могу использовать os. path.join по какой-то причине, потому что он таинственным образом добавляет :\\ по неизвестной причине.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
39
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

пожалуйста, проверьте, не осталось ли в settings.py что-то вроде этого объявления списка DIRS:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [":"],
        ...

если да, измените его на

        'DIRS': [],

Неа. Я искал везде какие-либо случайные появления двоеточий, и я не видел ни одного.

ferzle 18.03.2022 22:06

Добавляется в корень пути для html шаблонов. Также может быть в конце PROJECT_ROOT или PROJECT_DIR. Я не уверен, какой из них используется для формирования пути шаблона abs

Razenstein 18.03.2022 22:14

Я нигде не устанавливаю PROJECT_ROOT или PROJECT_DIR.

ferzle 21.03.2022 14:06
Ответ принят как подходящий

Наконец-то разобрался. я заменил 'DIRS': os.path.join(BASE_DIR, '../templates'), с 'DIRS': [os.path.join(BASE_DIR, 'templates')]. Я до сих пор не уверен, почему он какое-то время работал с исходным кодом, и я также не уверен, зачем нужны [ ].

Другие вопросы по теме