让django dev服务器捕获除主页之外的任何内容

时间:2016-04-17 15:48:26

标签: django nginx

nginx / 1.4.6(Ubuntu) Django 1.8.4

这是我第一次在实时网络服务器上部署任何内容。 主机为我提供了IP地址和技术域名。

此时我只想使用Django开发webserber来显示网站的工作情况。这只是为了我自己,而不是一个真正的网站。 稍后一切都将通过gunicorn。

在/ etc / nginx / sites-available / default中:

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

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

    server_name localhost;

    location / {
        try_files $uri $uri/ =404;
        proxy_pass http://localhost:8000;
    }

}

然后在Django项目中:

在urls.py

from lists import views as list_views
from lists import urls as list_urls

urlpatterns = [
    #url(r'^admin/', include(admin.site.urls)),
    url(r'^$', list_views.home_page, name="home"),
    url(r'^lists/', include(list_urls)),
    ]

**In lists/urls.py**

from lists import views

urlpatterns = [
    url(r'^new$', views.new_list, name='new_list'),    
    url(r'^(\d+)/$', views.view_list, name='view_list' ),    
    url(r'^(\d+)/add_item$', views.add_item, name='add_item'),    
    ]

**lists/views.py**

import logging

def home_page(request):
    logger = logging.getLogger(__name__)
    logger.error('In home_page')


def view_list(request, list_id):
    logger = logging.getLogger(__name__)
    logger.error('In view_list')


def new_list(request):
    logger = logging.getLogger(__name__)
    logger.error('In new_list')

然后当我通过IP地址或技术链接访​​问我的网站时,我可以看到主页。

但是当我去/ lists / new时,我在浏览器中捕获了404。和

一样
nginx/1.4.6 (Ubuntu)

这意味着Django服务器甚至没有得到通知。并且检查日志证明了这一点。没有消息"在new_list"。绝对是Django dev服务器在这里没有捕获信号。

你能帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

如果你想检查你的Django项目是否运行良好,你不需要Nginx。只需./manage.py runserver example.com:8000即可通过http://example.com:8000访问您的网站。如果端口未打开,您也可以使用service nginx stop停止Nginx,然后在端口:80上运行Django。

此设置似乎告诉Nginx尝试查看文件是否存在,如果不存在则返回HTTP 404。我认为它不会到达第二行。

location / {
    try_files $uri $uri/ =404;
    proxy_pass http://localhost:8000;
}

尝试删除" try_files"并为您要提供的静态文件添加额外的location规则。

location /static/ {
    try_files $uri $uri/ =404;
}
location / {
    proxy_pass http://localhost:8000;
}