【发布时间】:2017-05-18 15:38:59
【问题描述】:
我可以通过管理页面上传图片,但是当我导航到 django 生成的 url 时找不到图片。 (404 错误) 文件正在上传到文件夹:
project_root/media/eventbanner/1/
我尝试了多种解决方案,但似乎没有一个适合我的情况。 Django 1.10 正在 Ubuntu 16.04 上本地运行。
我得到的网址是:
http://localhost:8000/media/eventbanner/1/banner_image.jpg
媒体根文件夹位于:
/home/username/xxx/xxx/project_name/media
HTML 文件中的代码:
<div class="banner-image">
<img src="{{ event.eventbanner.banner_image.url }}"/>
</div>
url.py 代码:
from django.conf.urls import url, include
from django.contrib import admin
from . import views
from django.conf import settings
from django.conf.urls.static import static
app_name = 'events'
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^details/(?P<event_id>[0-9]+)/$', views.details, name='details'),
url(r'^details/(?P<event_id>[0-9]+)/addcomment/$', views.add_comment, name='add_comment'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
settings.py
STATIC_URL = '/static/'
STATICFILES_DIRS =[os.path.join(BASE_DIR, 'static'),]
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
MEDIA_URL = '/media/'
models.py
def validate_only_one_instance(obj):
model = obj.__class__
if (model.objects.count() > 0 and obj.id != model.objects.get().id):
raise ValidationError("Can only create 1 %s instance" % model.__name__)
class EventBanner(models.Model):
event = models.OneToOneField(Event, unique=True)
banner_image = models.ImageField(upload_to=get_image_path, blank=True, null=True)
def clean(self):
validate_only_one_instance(self)
【问题讨论】:
-
有关信息,使用 Django 2.0+ 变得更加简单:docs.djangoproject.com/en/2.1/ref/urls/#static
标签: python django django-staticfiles