首页 > 解决方案 > 如何在 Django 中同时放置静态和媒体设置

问题描述

嗨,我对此很困惑,关于如何同时放入静态和媒体urlpatterns,我已经明白这static是用于 css/javascript 而media用于用户上传文件,从那时起如果我使用{% static '<pathname>' %}in 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)

我已经把静态和完美的作品,但我应该在哪里除了媒体?

标签: djangodjango-staticfilesdjango-media

解决方案


在你的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文件中,您应该设置静态文件位置和媒体文件位置,因为一旦将其部署到生产环境中,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 媒体)时,对该文件位置的引用存储在数据库中。因此,当您的上下文传递给模板时,您将自动获得一个可以在模板中引用的图像对象。

你会做这样的事情

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

我不确定您是否将上下文传递给模板,因此您需要从此处获取 if 或将您的视图从views.py文件中粘贴到您的问题中。


推荐阅读