我想要喜欢Django,但是开发环境中的静态和媒体文件业务让我疯狂.请把我从愚蠢中解救出来.
我在我的开发机器上.media我的项目目录的根目录中有文件夹.
在settings.py我有:MEDIA_ROOT = ''和MEDIA_URL = '/media/'.
在urls.py我有:
if settings.DEBUG:
urlpatterns += patterns('',
url(r'^media/(?P<path>.*)$',
'django.views.static.serve',
{'document_root': settings.MEDIA_ROOT, }),
)
Run Code Online (Sandbox Code Playgroud)
但我获得媒体文件的唯一方法是参考/media/media/例如
<img src="/media/media/image.png" />.
我期待(并希望)
<img src="/media/image.png" />
谁能告诉我这里发生了什么,并给我一个简单的方法来设置媒体文件处理?
非常感谢你.
@Timmy O'Mahony - 谢谢!史诗般的帖子,非常清楚.但它留下了几个问题:
(1)我必须用/media/和/static/,不media/和static/的MEDIA_URL和与STATIC_URL-我这么想吗?
(2)如果collectstatic软管/static/,你在哪里放置网站级CSS,例如网站的CSS文件?/static/显然不在.
(3)我将它们放在项目根目录下的"_"目录中并设置STATICFILES_DIRS为指向它 - 这似乎是开发服务器获取其静态文件的地方,尽管有urlpatterns指令.如果这是错误的,你在开发过程中将网站级CSS放在哪里,以及collectstatic修改它们时的工作流程是什么- 你是否必须在一个地方编辑它们,并在每次编辑后将它们收集到其他地方?
我注意到最近一段代码直接比较了两个整数列表,如下所示:
a = [10,3,5, ...]
b = [5,4,3, ...,]
if a > b:
...
Run Code Online (Sandbox Code Playgroud)
这似乎有点奇怪,但我想True如果所有list_a的元素都大于那么它会返回list_b,如果每个元素相等或者list_b元素比那些元素大,则会返回False list_a.所以我测试了它:
>>> a=[3,3,3,3]
>>> b=[4,4,4,4]
>>> a>b
False
>>> b>a
True
Run Code Online (Sandbox Code Playgroud)
好的,有效.同样如下:
>>> b = [1,1,1,1]
>>> a = [1,1,1,1]
>>> a>b
False
>>> b>a
False
Run Code Online (Sandbox Code Playgroud)
但是当它变得更模糊时:
>>> a=[1,1,3,1]
>>> b=[1,3,1,1]
>>> a>b
False
>>> b>a
True
Run Code Online (Sandbox Code Playgroud)
要么:
>>> a=[1,3,1,1]
>>> b=[1,1,3,3]
>>> a>b
True
>>> b>a
False
Run Code Online (Sandbox Code Playgroud)
结果有点陌生.python究竟在做什么?似乎它返回结果有利于第一个列表,其中最左边的元素大于相应的?
这是在杀我!
我正在使用django-filebrowser,我想创建一个图库应用程序,利用它的上传功能来管理图像.
我有一个Gallery模型,允许用户在服务器上选择或创建目录,并将文件上传到该文件夹以显示在库中.我想自动搜索用户已将图像上传到的目录,然后选择该目录,然后自动为该文件夹中的每个图像创建图像实例.
class Gallery(model.Models):
gallerydirectory = FileBrowserField(...)
title = ...
description ...
class Image(model.Models):
image_field = models.ImageField()
Run Code Online (Sandbox Code Playgroud)
问题是FileBrowser表示图像与Django不同,但我想使用DJango ImageFields,因为我可以在模板端使用其他应用程序(sorl缩略图).
我有文件所需的所有数据,即文件名,路径等,我只是无法让Django创建一个ImageField的实例,而无需再次实际上传图像.我只是想填充它.
我在这里看到另一个提示如下的线程:
for image in filebrowser_image_objects_list:
f = File(open('path-to-file-on-server','r'))
i = Image()
i.image_field('filename.png',f.read())
Run Code Online (Sandbox Code Playgroud)
但这给了我一个:
SuspiciousOperation error
Attempted access to '/filename.png' denied
Run Code Online (Sandbox Code Playgroud)
这表明路径没有被正确读取.我打印了文件对象的属性,它正在打开正确的图像,它只是没有被传递到ImageField
帮助将非常感谢!
UPDATE
我已经放弃了尝试这项工作,因为它太乱了.我上面遇到的问题是我将ImageField的upload_field设置为'/'并且它没有被注意到意味着该文件被写入'/something.png'.
我已对其进行了修改,以便Image现在也使用FileBrowserField而不是ImageField.
我正在尝试在我的Django应用程序中为我的模型添加图像.
models.py
class ImageMain(models.Model):
product = models.ForeignKey(Product)
photo = models.ImageField(upload_to='products')
Run Code Online (Sandbox Code Playgroud)
在开发模式下,每次我尝试通过Django管理员上传图像时,我都会得到:
上传有效图片.您上传的文件不是图像或损坏的图像.
我通过fink安装了libjpeg,然后在ox X 10.5.7上安装了PIL 1.1.6
from PIL import Image
file = open('/Users/Bryan/work/review_app/media/lcdtvs/samsung_UN46B6000_front.jpg', 'r')
trial_image = Image.open(file)
trial_image.verify()
Run Code Online (Sandbox Code Playgroud)
似乎jpg基于该会话是有效的.但是,它不会加载.我尝试过其他jpgs,它们也不起作用.
怎么可能出错?
我能够成功上传一个png文件.
在使用viewsets.ModelViewSet和时,HyperlinkedSerializer如何为列表和详细信息视图设置不同的序列化程序 ?
我看到如何viewsets.ViewSet通过定义list和retrive(这是一个例子)来做到这一点,但我不知道如何优雅地适应它viewsets.ModelViewSet
我有以下内容:
base.html文件
<html>
{% include 'header.html' %}
<div>
{% block content %}Default Content{% endblock %}
</div>
</html>
Run Code Online (Sandbox Code Playgroud)
了header.html
<header>
{% block logo %}Logo 1{% endblock %}
</header>
Run Code Online (Sandbox Code Playgroud)
homepage.html
{% extend 'base.html' %}
{% block logo %}Logo 2{% endblock %}
{% block content %}Yap Yap Yap{% endblock %}
Run Code Online (Sandbox Code Playgroud)
从本质上讲,这不起作用.当我渲染homepage.html我得到:
<html>
<header>Logo 1</header>
<div>Yap Yap Yap</div>
</html>
Run Code Online (Sandbox Code Playgroud)
但如果我将代码header.html移入base.html(即include完全摆脱)它可以正常工作.任何人都可以解释为什么会这样吗?
我觉得它与included父母被渲染后渲染的模板有什么关系?
我有一个具有唯一通用外键关系的模型:
class Contact(models.Model):
...
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey()
class Meta:
unique_together = ('content_type', 'object_id',)
Run Code Online (Sandbox Code Playgroud)
意思是一个Contact只能属于一个对象.通常,当我想扭转我能做的关系时
class Person(models.Model):
...
contacts = generic.GenericRelation(Contact)
Run Code Online (Sandbox Code Playgroud)
并且召唤person.contacts.all()将给我所有的对象.因为Contact在我的情况下只会有一个返回,有没有更好的方法来反向访问这个对象?
我可以写,person.contact.all()[0]但必须有一个更清洁的方法
我在一些代码中看到了这个:
$("<p/>").append("<div>something</div>").appendTo("body");
Run Code Online (Sandbox Code Playgroud)
并注意到它会自动关闭p生成的HTML中的标记:
<p><div>something</div></p>
我以前从未见过选择器语法$("<p/>").这是错误(Chrome只是猜测它应该是什么)还是这是jQuery选择器语法的一个特性?
我已经设置了TinyMCE来使用Admin面板(根据Django Docs http://code.djangoproject.com/wiki/AddWYSIWYGEditor中的说明)
问题是我在模型中有Inlines和其他文本区域,我不想让TinyMCE渲染
有谁知道如何设置TinyMCE只加载我的模型中的特定字段?
谢谢
编辑 好的,所以我安装了django-tinymce并对其进行了配置
我在模型的admin.py中创建了以下内容,其中包含我要添加的字段:
class FooAdminForm(forms.ModelForm):
class Meta:
model = Foo
def __init__(self, *args, **kwards):
self.bar = forms.TextField(widget=TinyMCE(attrs={'cols': 80, 'rows': 30}))
super(FooAdminForm, self).__init__(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
不幸的是,这仍然无效