Как настроить django с помощью apache, чтобы мое приложение находилось в корневом URL-адресе? - PullRequest
1 голос
/ 16 декабря 2011

Я новичок в Django, поэтому, пожалуйста, прости меня, если это окажется очевидным.

Я работал над учебниками, поэтому у меня есть проект (я назвал его «trydj»), в котором есть приложение под названием «опросы». То, что я хочу сделать, это иметь опросы в корне, то есть:

http://www.example.com/ вызовет представление индекса опросов и
http://www.example.com/details/ вызовет представление подробностей опросов.

Что я не хочу (но в настоящее время имею):

http://www.example.com/polls и
http://www.example.com/polls/details/

Я также хотел бы сохранить возможность предоставления другим приложениям других под-URL, таких как admin или другие приложения, которые я мог бы создать, например:

http://www.example.com/admin/ или
http://www.example.com/anotherapp/

У меня есть все так же, как это было в конце урока, с settings.py, manage.py и т. Д. На уровне проекта и urls.py как в trydj, так и в polls.

url.py в trydj имеет следующие urlpatterns:

urlpatterns = patterns('',
   # Uncomment the admin/doc line below to enable admin documentation:
   url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

   # Uncomment the next line to enable the admin:
   url(r'^admin/', include(admin.site.urls)),

   url(r'^polls/', include('polls.urls')),
)

и urls.py в опросах имеет следующие urlpatterns:

urlpatterns = patterns('',
   url(r'^$',
      ListView.as_view(
         queryset=Poll.objects.order_by('-pub_date')[:5],
         template_name='polls/index.html'
      )
   ),
   url(r'^(?P<pk>\d+)/$',
      DetailView.as_view(
         model=Poll,
         template_name='polls/detail.html'
      )
   ),
   url(r'^(?P<pk>\d+)/results/$',
      DetailView.as_view(
         model=Poll,
         template_name='polls/results.html'
      ),
      name='poll_results'
   ),
   url(r'^(?P<pk>\d+)/vote/$',    'polls.views.vote'),
)

Конфигурация apache, которую я создал на основе документации django:

WSGIScriptAlias / /var/django/trydj/wsgi.py
WSGIPythonPath /var/django

<Directory /var/django/trydj>
    <Files wsgi.py>
        Order allow,deny
        Allow from all
    </Files>
</Directory>

Мой wsgi.py, опять же на основе документации django:

import os
import sys

sys.path.append('/var/django/trydj')

os.environ['PYTHON_EGG_CACHE'] = '/var/django/.python-egg'
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

Я пытался изменить соответствующее регулярное выражение url в trydj.urls различными способами. Значение r'^' в некотором роде помогло, но тогда приложение не смогло найти свои файлы шаблонов, даже если я переместил их из каталога опросов в корень папки шаблонов.

Как всегда, любая помощь очень ценится.

1 Ответ

3 голосов
/ 16 декабря 2011

Просто измените эту строку:

url(r'^polls/', include('polls.urls')), 

к этому

url(r'^', include('polls.urls')),

Чтобы все URL-адреса, которые достигают этой точки, передавались в ваш файл urls.py в опросах, а не только с префиксом polls/.

О, и я должен добавить, что важно иметь эту строку в том месте, где она находится в файле (последняя), чтобы другие приложения могли распознать свои собственные URL-адреса, прежде чем ваше приложение опросов соберет их все. Если вы поменялись местами

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...