Как поставить stati c и настройку мультимедиа одновременно в Django - PullRequest
0 голосов
/ 31 марта 2020

Привет, я немного запутался в этом вопросе о том, как одновременно поместить stati c и media в urlpatterns, я уже понимаю, что static для css / javascript, а media для файла загрузки пользователя, с тех пор, если я использую файл {% static '<pathname>' %} в html, но я ссылаюсь на носитель, а не на css / javascript, есть ли конфликт или как django поймет, что я Я нацеливаюсь на медиа?

вот мой urls.py

from django.conf import settings
from django.conf.urls.static import static
from django.urls import path
from .views import (
    login,
    signup,
)

urlpatterns = [
    path('', login, name = 'login'),
    path('signup/', signup, name = 'signup')
]

urlpatterns += static(settings.STATIC_URL, document_root = settings.STATICFILES_DIRS)

Я уже поставил stati c и работает отлично, но где я должен, кроме медиа?

Ответы [ 3 ]

1 голос
/ 31 марта 2020

В вашем urls.py вы можете сделать что-то подобное для разработки

from django.urls import path

urlpatters = [
    # your url patterns here
]

if settings.DEBUG:
    from django.conf.urls.static import static
    from django.contrib.staticfiles.urls import staticfiles_urlpatterns

    # serve static and media files from development server
    urlpatterns += staticfiles_urlpatterns()
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Вам не нужно использовать эти настройки, когда у вас есть DEBUG = False в вашем файле settings.py.

Также в вашем файле settings.py вы должны указать расположение файлов * stati c и файлов мультимедиа, потому что, как только вы развернете его в производство, Django будет использовать эти настройки при запуске python manage.py collectstatic. Вот пример:

STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

=== РЕДАКТИРОВАТЬ, чтобы ответить на ваш вопрос в комментарии ===

Когда загруженный пользователем контент загружен (AKA media), ссылка на этот файл Местоположение хранится в базе данных. Поэтому, когда ваш контекст передается в шаблон, вы автоматически получаете объект изображения, на который вы можете ссылаться в своем шаблоне.

Вы бы сделали что-то вроде этого

<img src="{{ self.someimage.url }}" alt=""> # would give you the url path.

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

1 голос
/ 31 марта 2020

Вы можете использовать настройку STATICFILES_DIRS , чтобы создать список активов, а затем пространство имен папки «media».

ex:

STATICFILES_DIRS = [
    ("media", "/path/to/media/directory"),  
]

и использовать это так в ваших шаблонах

{% static "media/your_asset_file" %}
0 голосов
/ 31 марта 2020

Добавьте MEDIA_URL и MEDIA_ ROOT в ваш файл настроек.

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,'media')

Затем в вашем файле urls.py Просто добавьте эти строки ниже той, которая у вас есть для stati c файлов.

urlpatterns+=static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...