我正在开发一个我们希望发生以下情况的应用程序:
http://<host>/site/<user-friendly-url>/
的网址上提供,其中index.html位于根目录,所有路径指向css和js文件等。我知道如何配置路由,但我想知道在视图中放置什么。我尝试过STATIC_ {ROOT,URL}和MEDIA_ {ROOT,URL},但我觉得这不是正确的方法。
总结:有没有办法在视图中添加return serve_this_static_directory()
之类的内容?或者那里有解决方法吗?
感谢您的回答
修改
试图澄清我的问题。
http://<host>/site/<user-friendly-url>/
)与目录名称不匹配(可能是XYZ_html/
)。由于这两个原因,我不知道如何使用网络服务器提供这些内容,因为如何配置路由呢?
答案 0 :(得分:1)
首先,您必须意识到django默认不会为您的静态或媒体文件提供服务,您应该使用您的HTTP服务器(nginx,apache或其他)。
接下来要做的是将您的HTTP服务器配置为&#34; / path / to / your / project / public&#34;以及域中根URL内的任何文件,如果找不到文件,它应该重定向到django而不是服务404错误(所以如果路径/ site / something /中有一些文件,你的HTTP服务器应该提供该文件,如果没有,它会提供任何django将在该路径上输出的内容.nginx的示例配置可能如下所示:
server {
listen 80;
server_name oskar.local;
root /path/to/your/project/public;
location @default {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
include /etc/nginx/uwsgi_params;
uwsgi_pass app_server; # or some proxy_pass if you're not using uwsgi
break;
}
location / {
try_files $uri @default;
}
}
最后一步是配置您的django app的MEDIA_ *设置:
MEDIA_ROOT = "/path/to/your/project/public"
MEDIA_URL = "/"
但要小心!使用这种方法存在潜在的漏洞:任何用户都可以将文件放入通常由django处理的路径中。更好的方法是将所有&#34;子网站&#34;在某个子目录或单独的域中。