如何使用Django

时间:2019-04-01 02:56:22

标签: django-templates

我将博客文章存储为HTML,以便可以自定义格式。使用Django框架,我将博客文章HTML从数据库加载到子类模板的内容块中。我想在博客文章中有一张图片。如何格式化图像src以加载存储在我的静态文件夹中的图像。

Django教程(https://docs.djangoproject.com/en/2.1/intro/tutorial06/)提供的示例:

<img src="{% static assets/img/some_img.jpg %}" />

在内容块内不起作用。但是,我已经成功使用了以下语法,这些语法是我在此处(django 1.5 - How to use variables inside static tag)硬编码在模板页面中的

<img src="{% with assets/img/some_img.jpg as img_url %}{% static img_url %}{% endwith %}" />

以下是我的设置的一般示例:

数据库记录

ID = 1 Title =“博客标题” 内容=“ <p><img src="{% with assets/img/some_img.jpg as img_url %}{% static img_url %}{% endwith %}" /></p>

base_template.html

<html>
<body>
{% block content %}{% endblock %}
</body>
</html>

blogpost.html

{% extends 'base_template.html' %}
{% block content %}
{{database_record.Content}}
{% endblock %}

预期结果:

<html>
<body>
<p><img src="/static/assets/img/some_img.jpg" /></p>
</body>
</html>

实际结果:

<html>
<body>
<p><img src="{% with assets/img/some_img.jpg as img_url %}{% static img_url %}{% endwith %}" /></p>
</body>
</html>

问题在于,当从数据库中加载HTML时,我加载静态图像URL的尝试均无效。标签以渲染的HTML格式显示,就像它们在上方一样。框架转换大括号标记后必须从数据库加载内容。

如何链接从数据库加载的HTML中的静态图像?

1 个答案:

答案 0 :(得分:0)

回答我自己的问题...

背景

在阅读了更多的Django static file documentation之后,我了解到不应将图像存储在静态文件夹中。它们应存储在媒体文件夹中。

在生产环境中,Django鼓励开发人员让Web服务器(Apache / Nginx / etc)提供静态文件。因此,Web服务器将有一个规则,即将从磁盘上的文件提供带有'/ media'或'/ static'的所有URL,并且该请求不会转发到应用程序服务器。例如,example.com / media / some-img.jpg将被网络服务器识别,some-img.jpg将被网络服务器直接提供服务。

在开发环境中,可能没有网络服务器在运行,因此Django允许您使用MEDIA_URL和STATIC_URL设置在Django项目目录中指定要存储静态文件的文件夹要投放的文件。这是一个堆栈溢出答案,它在accessing the media folder in Django上有更深入的介绍。静态文件(通常是css和js文件)是特定于应用程序的,可以存储在特定应用程序的目录结构中,并且可以使用我一直使用的宏进行访问:

{% static assets/css/style.jpg %}

但是,无法通过硬编码的URL访问静态文件:localhost:port / static / assets / css / style.jpg。您必须使用宏。

媒体文件的处理方式有所不同。 Django框架允许您指定MEDIA_URL设置,并将所有媒体文件存储在其中。然后,该框架允许您使用诸如localhost:port / media / some_img.jpg之类的硬编码URL访问这些文件。

使用更好的架构

如何从使用Django从数据库加载的HTML链接到静态文件夹中的图像?

如果将图像存储在媒体文件夹中,则可以使用图像URL路径,而在数据库中存储的HTML中没有宏。例如:

<img src="/media/some_img.jpg" />

如果在settings.py中正确设置了媒体文件夹,则上面的图像标签(是否存储在数据库中)将起作用。

从技术上讲,问题仍然没有得到答案

首先,重要的是要承认当我应该使用媒体文件夹时,尝试从静态文件夹中提供图像是错误的。话虽如此,我不会按照回答的方式结束问题,因为从更一般的意义上讲,我的问题仍然有效。可以说我想指定从数据库加载的HTML中CSS文件的路径吗?我仍然不知道该怎么做。以下问题仍未解决:

如何使用从数据库加载的HTML提供静态文件?