Chr*_*Yin 0 html python django url static
我正在编写一个在页面上显示一组图像的视图.
这是模型
#models.py
class Movie(models.Model):
title = models.CharField(max_length = 500)
poster = models.ImageField(upload_to = 'qanda/static/movie_posters')
#index.html
<img src = "{{ STATIC_URL }}movie_posters/{{ movie.poster }}"></a>
Run Code Online (Sandbox Code Playgroud)
当我运行服务器时,图像不会出现.图像尝试加载的URL是
http://127.0.0.1:8000/static/movie_posters/qanda/static/movie_posters/image.jpg
Run Code Online (Sandbox Code Playgroud)
当它应该尝试加载的URL是
http://127.0.0.1:8000/static/movie_posters/image.jpg
Run Code Online (Sandbox Code Playgroud)
我的假设是,因为movie.poster位于'qanda/static/movie_posters',当我在HTML上呈现它时,它正在加载静态URL(127.0.0:8000 /静态),然后是位置'qanda/static /最后是movie_posters.如何正确渲染图像?
图像网址的计算方式有两部分.
首先在settings.py你的定义中MEDIA_ROOT.MEDIA_ROOT指定计算机上将存储媒体的绝对文件夹.例如,对于这些设置:
MEDIA_ROOT = '/abs/path/to/media/'
Run Code Online (Sandbox Code Playgroud)
如果你有一个领域
models.ImageField(upload_to='movie_posters')
Run Code Online (Sandbox Code Playgroud)
然后图像将存储在:
/abs/path/to/media/movie_posters/
/abs/path/to/media/movie_posters/poster.jpg <- example
Run Code Online (Sandbox Code Playgroud)
这涉及媒体存储在硬盘上的位置.
第二部分是如何计算这些媒体文件的网址.为此你定义MEDIA_URL在你的settings.py.这实际上是将URL映射到您的MEDIA_ROOT位置.那么如果你MEDIA_URL是:
MEDIA_URL = 'http://localhost/media/'
Run Code Online (Sandbox Code Playgroud)
然后,如果要访问存储movie_posters/poster.jpg的绝对路径为的图像/abs/path/to/media/movie_posters/poster.jpg,则其URL应为http://localhost/media/movie_posters/poster.jpg.您可以通过执行以下操作来计算URL:
{{ MEDIA_URL }}{{ movie.poster }}
Run Code Online (Sandbox Code Playgroud)
请注意我使用的是MEDIA_URL代替STATIC_URL.那些不是一回事.然而,计算这样的网址并不是很整洁.这就是为什么Django的ImageField并且FileField有一个url属性:
{{ movie.poster.url }}
Run Code Online (Sandbox Code Playgroud)
然后Django将根据您的MEDIA_URL设置计算正确的URL .
注意:
要使所有这些工作,您必须运行单独的介质服务器.Django不提供任何媒体文件.在开发中,它只能提供静态文件(与媒体文件不同).因此在开发中,提供媒体文件的一个好方法是使用Python的简单Web服务器.为此,打开一个新终端(在Linux和Mac上)或命令提示符(在Windows上)窗口/选项卡,然后导航到您的媒体文件夹.然后在那里执行以下命令:
python -m SimpleHTTPServer 8090
Run Code Online (Sandbox Code Playgroud)
并确保您的设置是:
MEDIA_URL = 'http://localhost:8090/'
Run Code Online (Sandbox Code Playgroud)
然后Python将为您的媒体文件提供服务.这对开发很有用.