Django:了解如何在开发noobedition期间提供静态文件

2024-04-26 13:59:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力让我的静态文件工作。在开始发布文档链接之前,我已经阅读并阅读了django教程级别,了解以下链接:

在- https://docs.djangoproject.com/en/1.11/ref/models/fields/#django.db.models.FileField

我要说的是,我认为第二个问题非常令人困惑。在

简言之,我用文档来解决问题的尝试都没有成功。所以我希望有人能带我走过这一切。在

首先,我有一个应用程序,my_app。在my_app中,我有一个模型,它的图像字段如下所示:

def my_app_dir_path(instance, filename):
    return 'my_app/static/my_app/images/other_{0}/{1}'.format(instance.other.id, filename)


MyModel(models.Model):
    other = models.ForeginKey("other", on_delete=models.CASCADE)
    image = models.ImageField(upload_to=my_app_dir_path)

简而言之,我上传的文件会转到名称空间的本地静态目录:

^{pr2}$

正如它说的,我应该在(4)中为链接howto静态文件配置静态文件。在

太好了。在

我有一个虚拟视图,我正在尝试查看是否可以加载图像:

#/my_app/views.py
def dummy(request):
    img = MyModel.objects.first()
    return render(request, 'my_app/dummy.html', {'img':img})

基本上就是这样

#dummy.html
<img src="{{ img.image.url }}" />

查看网站检查器,我们看到返回的url是:

my_app/static/my_app/images/other_<id>/<image_file>

如果-在检查器中-我将该url更改为

static/my_app/images/other_<id>/<image_file>

图像出现!在

那么,如何获取(为了开发)正确的url呢?在

当我们在做的时候:

  • 这是什么惯例?('/var/www/static/')
  • 我应该将+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)添加到urlpattern中的my_app中还是根目录中?还是两者都有?在
  • 媒体和静态有什么区别。图像文件(除非使用动态SVG)不被认为是静态的吗?在
  • 为什么我必须在一个全局根静态/媒体文件夹中编译所有的东西(这难道不违背模块化的意义吗?)在

简而言之,有人能教我如何为开发提供静态图像吗? 我真的很困惑。在


Tags: 文件https图像imageappurldocsimg
1条回答
网友
1楼 · 发布于 2024-04-26 13:59:10

Django的术语并不完美。“static”和“media”文件都是静态的(在生产中,这两个文件都应该由web服务器提供服务,而不涉及Django)。此外,“媒体”文件可以是任何类型的文件,而不仅仅是媒体。更好的术语应该是“应用程序文件”和“数据文件”。在

静态文件”是永久文件;它们是应用程序的一部分。这些通常是JavaScript、CSS和诸如徽标和图标的图像。在

媒体文件”是应用程序数据。在某种程度上,它们是数据库的一部分,但是Django更喜欢将它们存储在数据库之外。通常这些文件对应于ImageField和{}。在

开发中,Django自动提供静态文件。您需要的唯一配置是STATIC_URL = '/static/'。如果您有文件my_app/static/my_app/js/myjsfile.js,Django将在http://localhost:8000/static/my_app/js/myjsfile.js(URL中的/static/实际上是由STATIC_URL指定的)。在模板中,通常使用<script src="{% static 'my_app/js/myjsfile.js' %}">,Django会将其转换为<script src="/static/my_app/js/myjsfile.js">,但即使您决定更改STATIC_URL,它也能正常工作。除了setSTATIC_URL和setDEBUG = True,通常不需要进行任何配置。在

对于媒体文件,您需要同时指定MEDIA_ROOTMEDIA_URL。第一个是实际存储“media”文件的目录,MEDIA_URL是媒体URL,就像MEDIA_URL = '/media/'。这意味着http://localhost:8000/media/xxx指向一个媒体文件。您还需要DEBUG = True在这里。在

生产中,情况更为复杂。{a3}我已经解释了。在

相关问题 更多 >