小编Tim*_*ony的帖子

访问Django中的"媒体"文件

我想要喜欢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修改它们时的工作流程是什么- 你是否必须在一个地方编辑它们,并在每次编辑后将它们收集到其他地方?

django

56
推荐指数
4
解决办法
7万
查看次数

使用大于或小于运算符比较两个列表

我注意到最近一段代码直接比较了两个整数列表,如下所示:

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究竟在做什么?似乎它返回结果有利于第一个列表,其中最左边的元素大于相应的?

python list

25
推荐指数
2
解决办法
2万
查看次数

Django:从服务器上的现有文件手动创建模型中的imagefield

这是在杀我!

我正在使用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.

python django django-models django-filebrowser imagefield

18
推荐指数
2
解决办法
2万
查看次数

为什么我不能通过admin /?将jpg文件上传到我的Django应用程序?

我正在尝试在我的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文件.

python django

17
推荐指数
2
解决办法
1万
查看次数

如何使用Django Rest Framework为列表和详细信息视图设置不同的Serializer?

在使用viewsets.ModelViewSet和时,HyperlinkedSerializer如何为列表和详细信息视图设置不同的序列化程序 ?

我看到如何viewsets.ViewSet通过定义listretrive(这是一个例子)来做到这一点,但我不知道如何优雅地适应它viewsets.ModelViewSet

django django-rest-framework

16
推荐指数
1
解决办法
6944
查看次数

从扩展模板覆盖`include`d模板中的块

我有以下内容:

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父母被渲染后渲染的模板有什么关系?

django django-templates

13
推荐指数
2
解决办法
4612
查看次数

反转唯一的通用外键(并返回对象而不是相关的管理器)

我有一个具有唯一通用外键关系的模型:

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]但必须有一个更清洁的方法

django

13
推荐指数
2
解决办法
3913
查看次数

如何从视图中为Django管理站点中的特定项生成URL?

我想创建一个链接,将用户带到管理站点中的特定项目(假设他们具有正确的权限).

类似于:https:// mysite/admin/app/model/id /

这可以用反向完成吗?

django

12
推荐指数
1
解决办法
2032
查看次数

jQuery会自动关闭附加标签吗?例如$("<p />")

我在一些代码中看到了这个:

$("<p/>").append("<div>something</div>").appendTo("body");
Run Code Online (Sandbox Code Playgroud)

并注意到它会自动关闭p生成的HTML中的标记:

<p><div>something</div></p>

我以前从未见过选择器语法$("<p/>").这是错误(Chrome只是猜测它应该是什么)还是这是jQuery选择器语法的一个特性?

jquery jquery-selectors

11
推荐指数
2
解决办法
6193
查看次数

Django Admin:仅将TinyMCE添加到特定的TextField?

我已经设置了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)

不幸的是,这仍然无效

django tinymce django-admin

8
推荐指数
2
解决办法
9402
查看次数