【问题标题】:Django Apache Application 404Django Apache 应用程序 404
【发布时间】:2014-07-10 00:00:38
【问题描述】:

我已经使用 Django 应用程序服务器尝试了我的 Django 应用程序,它工作得很好。但是,当我尝试将应用程序与 Apache 一起使用时,我在路由的每个 URL 中都会收到 404。以下是我得到的 404 错误:

Page not found (404)
Request Method: GET
Request URL:    http://www.domain.com:8787/myapp
Using the URLconf defined in myproject.urls, Django tried these URL patterns, in this order:
^admin/
^myapp/
^$
^media\/(?P<path>.*)$
The current URL, myapp, didn't match any of these.
You're seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page.

这是第一个 URL 文件:

# -*- coding: utf-8 -*-
from django.conf.urls import patterns, include, url
from django.conf import settings
from django.conf.urls.static import static
from django.views.generic.simple import redirect_to

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',

    url(r'^admin/', include(admin.site.urls)),
    (r'^myapp/', include('myproject.myapp.urls')),

    # This was the orginal plan
    # (r'^$', redirect_to, {'url': '/myapp/list/'}), # Just for ease of use.

    (r'^$', redirect_to, {'url': '/myapp/index/'}), # Just for ease of use.

) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

这是 (myproject.myapp.urls) 的第二个 URL:

# -*- coding: utf-8 -*-
from django.conf.urls.defaults import patterns, url

urlpatterns = patterns('myproject.myapp.views',
    url(r'^list/$', 'list', name='list'),
    url(r'^ass1/$', 'ass1', name='ass1'),
    url(r'^ass1v2/$', 'ass1v2', name='ass1v2'),
    url(r'^register/$','register', name='register'), # ADD NEW PATTERN!
    url(r'^login/$', 'user_login', name='login'),
    url(r'^logout/$', 'user_logout', name='logout'),
    url(r'^index/$', 'index', name='index'),
    url(r'^category/(?P<category_name_url>\w+)/$', 'category', name='category'),
    url(r'^indexAddJac444/$', 'indexAddJac444', name='indexAddJac444'),
)

这是 Apache 的 Apache 虚拟主机文件:

<VirtualHost *:8787>
    ServerAdmin test@localhost  

    WSGIDaemonProcess sampleapp python-path=/var/www/sampleapp:/var/www/sampleapp/env/lib/python2.7/site-packages
    WSGIProcessGroup sampleapp

    WSGIScriptAlias / /var/www/sampleapp/JavaApp/for_django_1-4/myproject/myproject/wsgi.py
        WSGIScriptAlias /myapp/index/ /var/www/sampleapp/JavaApp/for_django_1-4/myproject/myproject/wsgi.py
    <Directory /var/www/sampleapp/JavaApp/for_django_1-4/myproject/myproject>
        Order allow,deny
        Allow from all
    </Directory>

    Alias /media/ /var/www/sampleapp/JavaApp/for_django_1-4/myproject/myproject/media/
    Alias /static/ /var/www/sampleapp/JavaApp/for_django_1-4/myproject/myproject/static/
    Alias /myapp/ /var/www/sampleapp/JavaApp/for_django_1-4/myproject/myproject/myapp/

    <Directory /var/www/sampleapp/JavaApp/for_django_1-4/myproject/myproject/static>
    #Require all granted
    </Directory>

    <Directory /var/www/sampleapp/JavaApp/for_django_1-4/myproject/myproject/media>
    #Require all granted
    </Directory>

    <Directory /var/www/sampleapp/JavaApp/for_django_1-4/myproject/myproject/myapp>
    #Require all granted
    </Directory>

    <Directory /var/www/sampleapp/JavaApp/for_django_1-4/myproject/myproject>
    <Files wsgi.py>
    #Require all granted
    </Files>
    </Directory>

    ErrorLog /var/log/apache2/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog /var/log/apache2/access.log combined

</VirtualHost>

我觉得离解决问题很近,并且知道有解决方案。我需要进一步详细说明更多信息吗?请说。感谢您的帮助。

【问题讨论】:

  • 检查 Apache 日志(错误日志和访问日志)。
  • 尝试连接http://www.domain.com:8787/myapp/,最后使用/。如果它有效,那么/ 有问题。
  • 这些是我采取的故障排除步骤。

标签: python django apache


【解决方案1】:

让我们考虑一下:

当您调用myapp/ 时,它会读取url.py 并且它会看到规则myapp/,但它必须包含myproject.myapp.urls。可能在那一刻它会从 url 中删除 myapp/,因为它在文件 myproject.myapp.urls 中不需要它 - 所以现在你有空字符串作为 url。

现在它在myproject.myapp.urls 中搜索,但没有针对空字符串的规则。

我认为您可能可以毫无问题地连接到/myapp/lists/ - 因为myproject.myapp.urls 中有规则^list/$ - 但您需要myproject.myapp.urls 中的规则^$ 才能连接到/myapp/

【讨论】:

  • 如果我的回答对您有帮助,您可以将其标记为已接受(如果您有足够的声誉,请点赞)
  • 感谢您的回复。我要试试你的建议。所以你在 myproject.myapp.urls 中说我应该有 (r'^$', redirect_to, {'url': '/myapp/'}),
  • 这样你将/myapp/重定向到/myapp/,这样你就可以无限循环了。你需要url(r'^$', 'index', name='index') 和函数indexmyproject.myapp.views
  • 我稍后会回到那台计算机上检查一下。你的建议很有参考价值!
  • 我看到你在myproject.myapp.views 中已经有index 因为你有url(r'^index/$', 'index', name='index') 所以你必须在url(r'^$', 'index', name='index_2') 中使用不同的名字
猜你喜欢
  • 1970-01-01
  • 2013-08-07
  • 2021-03-14
  • 1970-01-01
  • 1970-01-01
  • 2010-10-04
  • 2015-12-25
  • 2012-05-02
  • 1970-01-01
相关资源
最近更新 更多