首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django resolve不解决

django resolve不解决
EN

Stack Overflow用户
提问于 2013-09-08 18:24:21
回答 1查看 868关注 0票数 2

我尝试了太多的东西,阅读了这些文档和其他相关的问题,以至于我对此变得疯狂和盲目,因为似乎很清楚错误在哪里,但我找不到它。

我的项目名称:“观察站”。

我的应用程序名:“tdcp”

我的dir结构是这样的

代码语言:javascript
复制
observatorio/
   settings.py
   urls.py
   manage.py
   ...
   tdcp/
       static/
       templates/
       __init__.py
       urls.py
       views.py
       models.py

一些我的settings.py:

代码语言:javascript
复制
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',
    'core',
    'tdcp',
    'south',
    'django.contrib.humanize',
)
ROOT_URLCONF = 'urls'
# ROOT_URLCONF = 'tdcp.urls'

我想把我的应用程序tdcp\urls.py包含在urls.py项目中,以便在将来创建更多的应用程序,并且从一开始就有一个更可伸缩的代码。所以:

我的项目urls.py:

代码语言:javascript
复制
from django.conf.urls import patterns, include, url


# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    url('', include('tdcp.urls', namespace='tdcp')),

    # 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)),
)

我的tdcp.urls.py:

代码语言:javascript
复制
from django.conf.urls import patterns, include, url

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('tdcp.views',
    url(r'^$', 'index', name='index'),
    url(r'^prueba$', 'prueba', name='prueba'),
    url(r'^all_urls_view', 'all_urls_view', name='all_urls_view'),
    url(r'^(?P<year>\d+)/(?P<metric>\w+)$', 'country_metric_view', name='country_metric_view'),
    url(r'^(?P<year>\d+)/(?P<province_code>\d+)/(?P<type>\w+)/(?P<metric>\w+)$', 'one_province_metric_view', name='one_province_metric_view'),
    url(r'^(?P<year>\d+)/(?P<ine_code>\w+)/(?P<metric>\w+)$', 'one_aapp_metric_view', name='one_aapp_metric_view'),
    url(r'^api/autocomplete_publicadministrations/$', 'autocomplete_publicadministrations', name='autocomplete_publicadministrations'),
    url(r'^api/autocomplete_indicators/', 'autocomplete_indicators', name='autocomplete_indicators'),
    url(r'^api/autocomplete_provinces/', 'autocomplete_provinces', name='autocomplete_provinces'),
    url(r'^navigation_form/', 'navigation_form', name='navigation_form'),

)

我认为这个设置是可以的,我可以访问我的任何页面,并且没有问题,除非我试图解析模板标签中的url。当我调用包含应用程序的urls.py时,错误必须出现在项目urls.py中,因为我发现,如果在我的settings.py中,它是这样设置的:

代码语言:javascript
复制
ROOT_URLCONF = 'tdcp.urls'

就像这样!!,它呈现页面并解析我模板中的任何url标记,如果我设置为:

代码语言:javascript
复制
# ROOT_URLCONF = 'urls'

因此,使用包含调用,它将停止解析urls。

我找到了这个ulrs解析器的shell测试,我试着找出了在反向()中使用的ulrs字典。当然,在这两种情况下都会发生这样的情况:

与ROOT_URLCONF = 'tdcp.urls‘

代码语言:javascript
复制
>>> from django.core import urlresolvers
>>> from tdcp import views
>>> print urlresolvers.get_resolver(None).reverse_dict
<MultiValueDict: {'index': [([(u'', [])], '$', {})], 'autocomplete_publicadministrations': [([(u'api/autocomplete_publicadministrations/', [])], 'api/autocomplete_publicadministrations/$', {})], 'autocomplete_provinces': [([(u'api/autocomplete_provinces/', [])], 'api/autocomplete_provinces/', {})], 'prueba': [([(u'prueba', [])], 'prueba$', {})], <function country_metric_view at 0x02004670>: [([(u'%(year)s/%(metric)s', [u'year', u'metric'])], '(?P<year>\\d+)/(?P<metric>\\w+)$', {})], 'one_province_metric_view': [([(u'%(year)s/%(province_code)s/%(type)s/%(metric)s', [u'year', u'province_code', u'type', u'metric'])], '(?P<year>\\d+)/(?P<province_code>\\d+)/(?P<type>\\w+)/(?P<metric>\\w+)$', {})], <function one_province_metric_view at 0x020046B0>: [([(u'%(year)s/%(province_code)s/%(type)s/%(metric)s', [u'year', u'province_code', u'type', u'metric'])], '(?P<year>\\d+)/(?P<province_code>\\d+)/(?P<type>\\w+)/(?P<metric>\\w+)$', {})], 'one_aapp_metric_view': [([(u'%(year)s/%(ine_code)s/%(metric)s', [u'year', u'ine_code', u'metric'])], '(?P<year>\\d+)/(?P<ine_code>\\w+)/(?P<metric>\\w+)$', {})], <function one_aapp_metric_view at 0x020046F0>: [([(u'%(year)s/%(ine_code)s/%(metric)s', [u'year', u'ine_code', u'metric'])], '(?P<year>\\d+)/(?P<ine_code>\\w+)/(?P<metric>\\w+)$', {})], 'navigation_form': [([(u'navigation_form/', [])], 'navigation_form/', {})], <function index at 0x02004630>: [([(u'', [])], '$', {})], <function all_urls_view at 0x01A917B0>: [([(u'all_urls_view', [])], 'all_urls_view', {})], <function autocomplete_provinces at 0x02004530>: [([(u'api/autocomplete_provinces/', [])], 'api/autocomplete_provinces/', {})], <function prueba at 0x020045F0>: [([(u'prueba', [])], 'prueba$', {})], 'autocomplete_indicators': [([(u'api/autocomplete_indicators/', [])], 'api/autocomplete_indicators/', {})], <function autocomplete_indicators at 0x02004570>: [([(u'api/autocomplete_indicators/', [])], 'api/autocomplete_indicators/', {})], <function navigation_form at 0x020045B0>: [([(u'navigation_form/', [])], 'navigation_form/', {})], 'country_metric_view': [([(u'%(year)s/%(metric)s', [u'year', u'metric'])], '(?P<year>\\d+)/(?P<metric>\\w+)$', {})], 'all_urls_view': [([(u'all_urls_view', [])], 'all_urls_view', {})], <function autocomplete_publicadministrations at 0x01FFC5F0>: [([(u'api/autocomplete_publicadministrations/', [])], 'api/autocomplete_publicadministrations/$', {})]}>
>>> print urlresolvers.get_resolver(None).reverse_dict.items()[0][0]
index

使用ROOT_URLCONF =‘url’

代码语言:javascript
复制
>>> from django.core import urlresolvers
>>> from tdcp import views
>>> print urlresolvers.get_resolver(None).reverse_dict <MultiValueDict: {}>
>>> print urlresolvers.get_resolver(None).reverse_dict.items()[0][0] Traceback (most recent call last):   File "<console>", line 1, in <module> IndexError: list index out of range

我做错什么了??

再测试一次

代码语言:javascript
复制
I updated the project urls.py like this:
from django.conf.urls import patterns, include, url


# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

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

    # project urls
    url(r'^hola', 'hola', name='hola'),

    # include app urls
    url(r'^/', include('tdcp.urls', namespace='tdcp')),
    )

所以现在,当我在shell中打印url解析字典时,它只会找到唯一挂起urls.py项目的静态url,没有一个包含的urls.py,无论是admin/还是我的应用程序tdcp/。

代码语言:javascript
复制
>>> from django.core import urlresolvers
>>> from tdcp import views
>>> print urlresolvers.get_resolver(None).reverse_dict
<MultiValueDict: {'hola': [([(u'hola', [])], 'hola', {}), ([(u'hola', [])], 'hola', {})]}>
EN

回答 1

Stack Overflow用户

发布于 2013-09-08 19:07:39

我自己也是Django的新手,所以我不能百分之百地肯定这一点,但我认为部分问题可能在于您在项目urls.py中声明包含的正则表达式的方式。

而不是

url('', include('tdcp.urls', namespace='tdcp'))

试一试

url(r'^/', include('tdcp.urls', namespace='tdcp'))

以下是Django文档中的相关片段:

请注意,本例中的正则表达式没有$(字符串结束匹配字符),但包含一个尾随斜杠。每当Django遇到include()时,它会将URL的任何部分剪掉,并将剩余的字符串发送到包含的URLconf进行进一步处理。

由于您在空regex中传递,所以整个URL匹配,因此没有什么可以传递给包含的URLConf。我不知道它将如何与反向解析器,但它可能是打破了这一点,也。(我快速浏览了Django代码,看看它是否是特殊情况下的空字符串,但没有看到--可能我错过了它。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18687133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档