我无法让Django抓住我的静态文件
相关模型:
class Poll(models.Model):
question = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published', auto_now_add=True)
image = models.FileField(upload_to='static/')
def __unicode__(self):
return self.question
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
was_published_recently.admin_order_field = 'pub_date'
was_published_recently.boolean = True
was_published_recently.short_description = 'Published Recently?'
settings.py:
STATIC_ROOT = '/Users/austinbailey/ENV/mysite/static/'
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'media'),
]
TEMPLATE_DIRS = [os.path.join(BASE_DIR, 'templates')]
模板标签:
<img src="{{ poll.image }}" alt="img">
与inspect元素一起显示的内容:
<img src="media/android_pumpkins_fall_1.jpg" alt="img">
这实际上是文件的正确路径,但由于某种原因,它只显示损坏的图像文件。我一直在研究这个问题,我很难过。提前谢谢!
------------------更新-------------------
自从我自己解决问题的初始帖子以来,我已经搞乱了settings.py中的结构和设置,但这是现在的结构。
项目结构:
-mysite (root)
-mysite
__init__.py
settings.py
urls.py
wsgi.py
-polls (app)
__init__.py
urls.py
models.py
views.py
forms.py
admin.py
-templates (html for admin site)
-migrations
-templates
-admin
base_site.html
-static
-media
android_computer_back.jpg
-2014
-04
-13
android_rose.jpg
-14
android_computer_android_studio.jpg
-static
-static-only
-admin ( base stuff for admin site )
-css
-js
-img
manage.py
db.sqlite3
来自settings.py的相关设置:
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
STATIC_ROOT = os.path.join(os.path.join(BASE_DIR), 'static', 'static-only')
STATIC_URL = '/static/'
MEDIA_URL = 'static/media/'
MEDIA_ROOT = os.path.join(os.path.join(BASE_DIR), 'static', 'media')
STATICFILES_DIRS = (
os.path.join(os.path.join(BASE_DIR), 'static', 'static'),
)
TEMPLATE_DIRS = [os.path.join(BASE_DIR, 'templates')]
更新型号:
class Poll(models.Model):
question = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published', auto_now_add=True)
image = models.ImageField(upload_to='%Y/%m/%d/')
最新图片标记:
<img src="{{ poll.image.url }}" alt="img" />
显示:
<img src="static/media/2014/04/14/android_computer_android_studio.jpg" alt="img" />
数据库设置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
答案 0 :(得分:0)
您的设置发生了什么变化?他们应该是这样的:
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = os.path.join(BASE_DIR, 'static', 'static-only')
STATIC_URL = '/static'
MEDIA_URL = '/static/media'
MEDIA_ROOT = os.path.join(BASE_DIR, 'static', 'media')
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static', 'static'),
)
TEMPLATE_DIRS = (
os.path.join(BASE_DIR, 'templates'),
)
无需在所有内容上调用os
次函数。
答案 1 :(得分:0)
好。请使用以下设置:
STATIC_URL = '/static/'
STATIC_ROOT = 'staticfiles'
MEDIA_ROOT = ''
MEDIA_URL = '/media/'
并在模板中调用图像字段名称,如下所示:
<img src="{{ model_name.img_field_name.url }}" alt="I will work" />
我上面给出的内容会让您在本地工作时看到用户上传的文件。你是否应该尝试在云中部署,如Heroku,收集静态和bla bla bla事件将自动为你完成。
Lemme知道它是否有效。它只是我当前项目中的一个精确片段。
所以,一个例子就是这样:
<img src="{{ category.photo.url }}" alt="I will work" />
答案 2 :(得分:0)
好的,所以我弄清楚问题是什么,当然结果是一个非常笨拙的错误。
我把我的urlpatterns用于媒体和静态文件放在错误的位置。
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
它们位于应用程序的urls.py下,而不是项目的urls.py,其中包含媒体和静态文件的实际文件夹。随着这一变化,图像正在显示,现在一切都很好。
感谢所有帮助