#python #django #django-templates
Вопрос:
Я использую Django 3.2
Я пытаюсь интегрировать приложение для блога, которое имеет слегка запутанную структуру каталогов для своих статических ресурсов. Вот соответствующая часть дерева:
Структура каталогов статических ресурсов приложения для блога
blog/static/blog/
├── css
│ ├── bona
│ │ ├── comment.css
│ │ ├── detail-page.css
│ │ ├── prism.css
│ │ ├── responsive.css
│ │ ├── styles
│ │ └── styles.css
│ ├── common-css
│ │ ├── bootstrap.css
│ │ ├── fontawesome-free
│ │ ├── ionicons.css
│ │ ├── ionicons.min.css
│ │ └── swiper.css
│ └── tinymce
│ ├── github.css
│ └── tomorrow-night-blue.css
├── font
│ ├── fontello.eot
│ ├── fontello.svg
│ ├── fontello.ttf
│ ├── fontello.woff
│ └── fontello.woff2
├── fonts
│ ├── Aileron
│ │ ├── Aileron-Black.otf
│ │ ├── Aileron-Bold.otf
│ │ ├── Aileron-Heavy.otf
│ │ ├── Aileron-Italic.otf
│ │ ├── Aileron-Light.otf
│ │ ├── Aileron-Regular.otf
│ │ ├── Aileron-SemiBold.otf
│ │ ├── Aileron-Thin.otf
│ │ ├── Aileron-UltraLight.otf
│ │ └── Gidole-Regular.ttf
│ ├── Colaborate
│ │ ├── ColabBol.otf
│ │ ├── ColabLig.otf
│ │ ├── ColabMed.otf
│ │ ├── ColabReg.otf
│ │ └── ColabThi.otf
│ ├── ionicons.eot
│ ├── ionicons.svg
│ ├── ionicons.ttf
│ ├── ionicons.woff
│ ├── linea-basic-10.eot
│ ├── linea-basic-10.svg
│ ├── linea-basic-10.ttf
│ ├── linea-basic-10.woff
│ ├── Material-Design-Iconic-Font.eot
│ ├── Material-Design-Iconic-Font.svg
│ ├── Material-Design-Iconic-Font.ttf
│ ├── Material-Design-Iconic-Font.woff
│ ├── Material-Design-Iconic-Font.woff2
│ ├── Roboto
│ │ ├── LICENSE.txt
│ │ ├── Roboto-BlackItalic.ttf
│ │ ├── Roboto-Black.ttf
│ │ ├── Roboto-BoldItalic.ttf
│ │ ├── Roboto-Bold.ttf
│ │ ├── Roboto-Italic.ttf
│ │ ├── Roboto-LightItalic.ttf
│ │ ├── Roboto-Light.ttf
│ │ ├── Roboto-MediumItalic.ttf
│ │ ├── Roboto-Medium.ttf
│ │ ├── Roboto-Regular.ttf
│ │ ├── Roboto-ThinItalic.ttf
│ │ └── Roboto-Thin.ttf
│ ├── Roboto_Condensed
│ │ ├── LICENSE.txt
│ │ ├── RobotoCondensed-BoldItalic.ttf
│ │ ├── RobotoCondensed-Bold.ttf
│ │ ├── RobotoCondensed-Italic.ttf
│ │ ├── RobotoCondensed-LightItalic.ttf
│ │ ├── RobotoCondensed-Light.ttf
│ │ └── RobotoCondensed-Regular.ttf
│ └── Spirequal-Light
│ └── Spirequal-Light.TTF
├── images
│ ├── authors_banner2.png
│ ├── authors_banner.png
│ ├── banner.jpeg
│ ├── blog-1-1000x600.jpg
│ ├── category-1-400x250.jpg
│ ├── category-3-400x250.jpg
│ ├── favicon.png
│ ├── logo.png
│ ├── marion-michele-330691.jpg
│ ├── media
│ │ ├── article-default.jpg
│ │ ├── banner
│ │ ├── category-default.jpg
│ │ ├── profile-pic-default.jpg
│ │ └── slider-1.jpg
│ ├── pexels-photo-370474.jpeg
│ ├── slider-1-1600x900.jpg
│ └── slider-1.jpg
└── js
├── blog
│ ├── blog.js
│ ├── highlight.pack.js
│ └── prism.js
├── bootstrap
│ └── bootstrap.bundle.min.js
└── common-js
├── bootstrap.js
├── jquery-3.1.1.min.js
├── scripts.js
├── swiper.js
└── tether.min.js
Фрагмент шаблона
<img alt="author-profile-image" src="{% static author_profile_details.profile.image.url %}" class="rounded-circle border border-dark shadow-sm">
Изображение src
выше разрешено для пути: /static/media/profile-pic-default.jpg
Но (как видно из приведенного выше пути к каталогу) правильный путь должен быть: static/media/blog/images/media/profile-pic-default.jpg
(Я думаю, что я не совсем понял, как развертывать статические файлы).
Мой вопрос заключается в следующем: учитывая структуру каталогов статических ресурсов приложения для блога, как мне использовать static
их для правильного поиска profile-pic-default.jpg
?
Комментарии:
1.
{{ static author_profile_details.profile.image.url }}
?2. @WillemVanOnsem, который решает тот же путь, что и выше — Django, похоже, игнорирует пространство имен приложений
3. «Медиафайлы» != «Статические файлы». Статические файлы-это статические ресурсы ваших веб-сайтов (логотипы, изображения, css и т.д.). Медиафайлы-это загруженный пользователем контент . Следовательно, вам нужно только написать
{{ author_profile_details.profile.image.url }}
(если вы пишете это правильно и ваши настройки мультимедиа правильные).
Ответ №1:
Без конкретики модели я буду предполагать, что это поле изображений, для которого приложение предоставляет статическое значение по умолчанию.
В этом случае правильный способ закодировать его в шаблоне-это:
{% if author_profile_details.profile.image %}
<img
alt="author-profile-image"
src="{{ author_profile_details.profile.image.url }}"
class="rounded-circle border border-dark shadow-sm">
>
{% else %}
<img
alt="author-profile-image"
src="{% static 'blog/images/media/profile-pic-default.jpg' %}"
class="rounded-circle border border-dark shadow-sm">
>
{% endif %}
Комментарии:
1. Ваши рассуждения кажутся здравыми … Я изучаю свой код, чтобы получить более четкое представление о том, что происходит, прежде чем принять ваш ответ — если это поможет решить проблему. Спасибо