Django, urls.py, include не работает - PullRequest
1 голос
/ 12 октября 2011

Я пытаюсь включить дополнительный urls.py в мои основные URL-адреса - однако, похоже, он не работает.Я сделал кучу поиска, и я не могу понять,

основной файл urls.py - администратор отлично работает

from django.conf.urls.defaults import patterns, include, url

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
        (r'^pnasser/',include('pnasser.urls')),
        (r'^admin/',include(admin.site.urls)),
        (r'^',include('pnasser.urls')),
)

У меня есть папка pnasser,с файлом urls.py со следующим:

from django.conf.urls.defaults import patterns, include, url

urlpatterns = patterns('pnasser.views',
        (r'^$','index'),
        (r'^login/$','login'),
        (r'^signup/$','signup'),
        (r'^insertaccount/$','insertaccount'),
        (r'^home/$','home'),
        (r'^update/(?P<accid>\d+)','update'),
        (r'^history/(?P<accid>\d+)','account_history'),
        (r'^logout/(?P<accid>\d+)','logout'),

)

Я не уверен, что, возможно, я что-то упускаю в конфигурации.если я захожу на mysite.com/admin, он корректно загружает администратора, если я захожу на mysite или любой другой URL в представлениях, я получаю страницу 404, не найденную:

Используя URLconf, определенный в mysite.urls,Django попробовал эти шаблоны URL в следующем порядке: 1. ^ pnasser / 2. ^ admin /

Текущий URL, не соответствует ни одному из них.

edit settings.py установленных приложений:

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    #'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
     'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
        'pnasser',

)

Update 2

Итак, я также попытался запустить свой сайт через сервер dev: python manage.py runserver 0.0.0.0:8000это работает.Я предполагаю, что где-то в моей интеграции с Apache с использованием mod_wsgi проблема.Тем не менее, я не уверен, где проблема будет

Ответы [ 6 ]

3 голосов
/ 12 октября 2011

Проблема, по-видимому, заключается в файле django.wsgi - и в различиях в том, как стандартный файл django.wsgi загружает сайт Python по сравнению с тем, как сервер разработки загружает сайт.Я думаю, это хорошо известная проблема, о которой я не знал.Спасибо всем за предложения.

Альтернативный файл django.wsgi найден здесь: http://blog.dscpl.com.au/2010/03/improved-wsgi-script-for-use-with.html

1 голос
/ 12 октября 2011

Проблема в том, что вы используете пустое регулярное выражение ("^" будет соответствовать чему угодно, включая пустой URL) для обработки директивы include.Если вы сделаете это, он всегда добавит первую косую черту в ваш путь запроса.Учитывая, что на вашем pnasser.urls нет регулярного выражения для "/", нет совпадения для запроса на mysite.com.

Если вы хотите, чтобы mysite.com или mysite.com/ перенаправили вас наПредставление pnasser "index", вам нужно что-то вроде:

from django.contrib import admin

from pnasser.views import index

admin.autodiscover()


urlpatterns = patterns('',
    (r'^/?$', index),
    (r'^pnasser/',include('pnasser.urls')),
    (r'^admin/',include(admin.site.urls)),
)

Итак, у вас есть:

  • mysite.com => pnasser.views.index
  • mysite.com / => pnasser.views.index
  • mysite.com / admin => страница администратора
  • mysite.com / pnasser / => pnasser.views.index
  • mysite.com / pnasser / home => pnasser.views.home

Если это не работает, убедитесь, что у вас установлено CommonMiddleware Django , и сделайтеу вас есть APPEND_SLASH = True (это значение по умолчанию, поэтому вам не нужно возиться с этим, если вы не найдете его в файле settings.py).

1 голос
/ 12 октября 2011
from django.contrib import admin,include
admin.autodiscover()

urlpatterns = patterns('',
        (r'^pnasser/',include('pnasser.urls')),
        (r'^admin/',include(admin.site.urls)),
        (r'^',include('pnasser.urls')),
)

возможно, вы пропустили "include" в первой строке

0 голосов
/ 14 мая 2014

Для меня работает следующее:

Если ваши URL-адреса не работают должным образом, вам может потребоваться добавить эту строку в местоположение /:

fastcgi_split_path_info ^()(.*)$;

С: https://code.djangoproject.com/wiki/DjangoAndNginx

0 голосов
/ 12 октября 2011

В файле вашего URL вы можете написать что-то вроде следующего ниже. + =, очевидно, позволяет нам добавлять дополнительные «шаблоны» к нашей переменной «urlpatterns», это также означает, что мы можем заключить их в оператор «если».

urlpatterns = patterns('',
    (r'^admin/', include(admin.site.urls)),
)

urlpatterns += patterns('',
    (r'^api/', include('api.urls')),
)

if settings.SHOP_TOGGLE:
    urlpatterns += patterns('',
        (r'^shop/', include('shop.urls')),)
    )
0 голосов
/ 12 октября 2011
Using the URLconf defined in mysite.urls, Django tried these
URL patterns, in this order:

Это сообщение об ошибке должно содержать список всех возможных URL-адресов, включая «расширенные» URL-адреса из вашего приложения pnasser.Поскольку вы получаете URL-адреса только из основного файла urls.py, это говорит о том, что вы неправильно включили приложение pnasser в файле settings.py INSTALLED_APPS.

.
...