如何使用apache设置django以便我的应用程序位于根URL?

时间:2011-12-16 15:51:48

标签: python django apache

我是django的新手所以请原谅我,如果结果显而易见的话。

我已经完成了这些教程,所以我有一个项目(我称之为“trydj”),它有一个叫做“民意调查”的应用程序。我想要做的是在根部提供民意调查,即:

http://www.example.com/将调用polls index视图和
http://www.example.com/details/将调用民意调查详情视图。

我不想要(但目前有):

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

我还希望能够在其他子网址上提供其他应用程序,例如我可能创建的管理员或其他应用程序,即:

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

我在项目级别使用settings.py,manage.py等教程以及trydj和poll中的urls.py,都可以获得所有内容。

trydj中的urls.py具有以下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'),
)

我基于django docs创建的apache配置是:

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()

我尝试以各种方式更改trydj.urls中的相关url正则表达式。值r'^'排除了这一点,但是即使我将它们移出轮询目录并进入模板文件夹的根目录,应用程序也找不到它的模板文件。

与往常一样,非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

只需更改此行:

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

到这个

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

这样,到达此点的所有网址都会通过民意调查传递到您的urls.py文件,而不只是前缀为polls/的网址。

哦,我应该补充说,将这一行放在文件中(最后一行)非常重要,以便其他应用程序有机会在您的民意调查应用程序将其全部用完之前识别自己的URL。如果你换了