除管理员外,django网址无法正常工作

时间:2013-02-17 17:35:03

标签: django django-urls

大家好,我的django应用程序网址无效 下面是我的项目urls.py

     urlpatterns = patterns('',

           url(r'^admin/', include(admin.site.urls)),
            url(r'^', include('recipe.urls', namespace="recipe")),

    )

这是我的app urls.py

from django.conf.urls import patterns,url


urlpatterns = patterns('recipe.views',

    url(r'^$', 'index', name='index'),
    url(r'^create/recipe/$', 'create_recipe', name='create_recipe'),
    url(r'^create/ingredients/(?P<recipe_id>\d+)/$', 'create_ingredients', 
    name="create_ingredients"),
    url(r'^create/steps/(?P<recipe_id>\d+)/$', 'create_steps', 
    name="create_steps"),
     url(r'^view/recipe/(?P<recipe_id>\d+)/$', 'view_recipe', 
    name="view_recipe"),
)

我无法获取索引页面和其他网址,除了管理员工作正常。请帮帮我

2 个答案:

答案 0 :(得分:0)

settings.py中,查找并修改此内容 -

TEMPLATE_DIRS = (
    os.path.join(os.path.abspath(os.path.dirname(__file__)), "templates"),
)

答案 1 :(得分:0)

从问题评论来看,你似乎遇到了Django模板而不是urlconfig的问题。以下是Django模板的工作原理。在settings.py中定义变量TEMPLATES_DIRS,在其中指定Django将查找模板的所有目录的元组。

假设您有以下TEMPLATES_DIRS

TEMPLATES_DIRS = (
    '/absolute/path/to/foo',
    '/absolute/path/to/bar',
)

然后,如果您查找模板base.html,Django将在以下位置查找它,如果找到第一个位置,将使用第一个位置:

/absolute/path/to/foo/base.html
/absolute/path/to/bar/base.html

在您的情况下,您提到将模板存储在Django的项目文件夹以及应用程序的文件夹中。在这种情况下,您必须确保在TEMPLATES_DIRS中定义了两个文件夹,如:

TEMPLATES_DIRS = (
    '/absolute/path/to/project/templates',
    '/absolute/path/to/app/templates',
)

然后在你的情况下,Django将能够找到base.htmlindex.html。现在为了简单起见,您可以在PROJECT_PATH中定义settings.py,它将存储项目路径的绝对路径,以便您可以轻松地将项目移动到其他位置。我认为这是您的问题所在。在Django&gt; = 1.4中,您有以下项目结构:

/project         <= this should be your PROJECT_PATH
  /project       <= instead of this
    templates/
      base.html
    settings.py
  /recipe
    templates/
      index.html
    models.py

考虑到这一点,尝试使用这样的东西:

PROJECT_PATH = os.path.abspath(os.path.join(__file__, '..', '..'))
PROJECT_NAME = os.path.basename(PROJECT_PATH)

TEMPLATES_DIRS = (
    os.path.join(PROJECT_PATH, PROJECT_NAME, 'templates'),
    os.path.join(PROJECT_PATH, 'recipe', 'templates')
)

在上面的PROJECT_PATH中计算项目的绝对路径。想象一下,您的settings.py位于/some/path/project/project/settings.py。然后按如下方式计算项目路径:

>>> # settings.py

>>> print __file__
/some/path/project/project/settings.py
>>> print os.path.join(__file__, '..', '..')
/some/path/project/project/settings.py/../../
>>> # now abspath normalizes the path two levels up
>>> print os.path.abspath(os.path.join(__file__, '..', '..'))
/some/path/project

>>> # now you figure out the project name so that you can get the project templates folder
>>> print os.path.basename(os.path.abspath(os.path.join(__file__, '..', '..')))
project

>>> print os.path.join(PROJECT_PATH, PROJECT_NAME, 'templates')
/some/path/project/project/templates
>>> print os.path.join(PROJECT_PATH, 'recipe', 'templates')
/some/path/project/recipe/templates