我正在努力让我的静态文件工作。在开始发布文档链接之前,我已经阅读并阅读了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呢?在
当我们在做的时候:
+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
添加到urlpattern
中的my_app
中还是根目录中?还是两者都有?在简而言之,有人能教我如何为开发提供静态图像吗? 我真的很困惑。在
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_ROOT
和MEDIA_URL
。第一个是实际存储“media”文件的目录,MEDIA_URL
是媒体URL,就像MEDIA_URL = '/media/'
。这意味着http://localhost:8000/media/xxx指向一个媒体文件。您还需要DEBUG = True
在这里。在在生产中,情况更为复杂。{a3}我已经解释了。在
相关问题 更多 >
编程相关推荐