Django 仅提供索引页面,其他所有页面为 404

Posted

技术标签:

【中文标题】Django 仅提供索引页面,其他所有页面为 404【英文标题】:Django only serves index page, 404 on all others 【发布时间】:2016-09-26 20:58:47 【问题描述】:

我有一个简单的 django 应用程序,我正试图在数字海洋上呕吐。我已将 nginx 配置为代理我的端口并提供静态文件。但是,当我单击任何链接转到另一个页面时,它会在我身上显示 404。它只正确服务于索引页面,其他一切都是 404。

如果你们中的任何后端向导有任何其他我目前正在做/不做的事情,请随时在您的回复中添加这些内容。

我对 NGINX 很陌生,所以请把它说得更简单:) 谢谢。

server 
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.html index.htm;

    # Make site accessible from http://localhost/
    server_name localhost;

    location /static 
            alias /home/rchampin/ryan_the_developer_django/static;
    

    location / 
             # First attempt to serve request as file, then
             # as directory, then fall back to displaying a 404.
             try_files $uri $uri/ =404;
             proxy_set_header X-Real-IP  $remote_addr;
             proxy_set_header X-Forwarded-For $remote_addr;
             proxy_set_header Host $host;
             proxy_pass http://127.0.0.1:8080;
             # Uncomment to enable naxsi on this location
             # include /etc/nginx/naxsi.rules
    


【问题讨论】:

【参考方案1】:

您已明确指示 nginx 在非文件请求上返回 404。你不需要这样做。 Django 可以管理Error 404s。您只需要在模板目录中添加一个 404.html,当有 404 Not Found Error 时,Django 就会显示此页面。

另外,您不需要对索引页面进行硬编码,使用 Django 有什么意义。 Michał Karzyński 有一个关于如何使用 Django 设置 Nginx 的非常好的文档:

Setting up Django with Nginx, Gunicorn, virtualenv, supervisor and PostgreSQL

【讨论】:

非常感谢!

以上是关于Django 仅提供索引页面,其他所有页面为 404的主要内容,如果未能解决你的问题,请参考以下文章

Bigquery 仅更新部分页面路径

Django 视图只呈现一页,不会呈现其余页面

删除所有实例后,Django 模型实例主键不会重置为 1

使用AJAX获取Django后端数据

将旧页面重定向到主页/索引

仅针对经过身份验证的用户的 Django 缓存