Django提供静态文件目录,如小型html应用程序

时间:2015-06-29 09:10:29

标签: python django django-staticfiles

我在django 1.6中有一个网页,现在我有一个html,swf,js的在线目录。当我直接打开它的目录时,它工作正常(http://myotherapp.com/mydirectory)it调用index.html里面,一切正常,因为它有相对的URL,但当我在django中使用不同的url托管它时,例如{{ 3}}它不会相对附加任何css和js。我知道我可以在index.html中更改文件路径但是会有更多像这样的包,网站的最终用户无法处理此

我通过django admin app管理压缩目录。

现在我有一个解决方法。我上传了压缩包,将其解压缩到我的media / static目录,并使用regexp修改上传和解压缩的index.html js / css / swf相对路径为绝对但如果执行此在线目录的公司将更改结构或添加新文件我没有工作,因为我通过名字搜索这样的相对网址:" book.swf"或" js / books.swf"然后我把它改成绝对的。问题是我无法使其更灵活,因为在html中有许多JS代码(这些css / js / swf文件的名称也在JS中使用)。

现在的网址示例:http://myapp.com/publication/1,它使用我媒体目录中上传的index.html作为模板。

这个解决方案并不完美,因为例如它不能用js重新定位到mobile / index.html并显示目录的移动版本。

但是如何用django / python方式进行制作?

2 个答案:

答案 0 :(得分:1)

您必须从HTTP服务器提供静态文件,并将其配置为与settings.py文件中的STATIC_URL设置相关。

确保您已将这些静态文件放在本地静态应用程序的目录中。

然后运行./manage.py collectstatic将这些文件检索到STATIC_ROOT目录,在那里提供它们。

在模板中,您应该使用以下静态文件:

{% load static %}
<img src='{% static "my_app/myexample.jpg" %}' alt='someimg'>

自动参考有关静态文件的设置配置。

来源: Django Static files documentation

答案 1 :(得分:0)

当您在django中渲染模板时,您还应该设置正确的静态设置:

BASE_DIR = os.path.dirname(os.path.dirname(__file__))
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'

在网址中:

    urlpatterns = [
    # ... the rest of your URLconf goes here ...
    ] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
模板中的

{% load staticfiles %}
<img src="{% static "my_app/myexample.jpg" %}" alt="My image"/>

这里是一个django documentation,澄清了这一尝试

使用django模型编辑/解决方案

models.py:

from django.db import models
class Publication(models.Model):
    name = models.CharField(max_length=128)
    # other fields

class MyFilesModel(models.Model):
    file = models.FileField(upload_to='some/place/in/media')
    publication = models.ForeignKey('Publication', related_name='files')
    created_at = models.DateTimeField('')
    # other fields

admin.py(轻松添加出版物和文件):

from django.contrib import admin

admin.site.register(Publication)
admin.site.register(MyFilesModel)

views.py:

def show_publication_list(request, publication_id):
    publication = get_object_or_404(Publication, pk=publication_id)
    context = dict(publication=publication)
    return render(request, 'template/path', context, content_type='application/xhtml+xml')

urls.py:

from django.conf.urls import patterns, url
urlpatterns = patterns('',
                       url('^publication/(?P<publication_id>\d+)/?$',
                           show_publication_list))

模板:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<h1>{{ publication.name }}</h1>
<h3>Files:</h3>
<ul>
    {% for file in publication.files %}
    <li>
        <a href="{{ file.url }}" target="_blank">{{ file.name }}</a>
    </li>
    {% endfor %}

</ul>
</body>
</html>

在此解决方案中,您将能够从django管理员级别添加发布并为其分配文件。无需手动上传。