Обратный URL-адрес django не работает для именованных URL-адресов (отредактированный) нашел причину, но теперь застрял! - PullRequest
4 голосов
/ 22 февраля 2011

См внизу для последних прорывов: Я использую django SVN 15632

Tried viewHallo in module core.views. Error was: 'module' object has no attribute 'viewHallo'

- ошибка, которую я получаю после попытки reverse('home') или reverse('admin:index').

это мои проекты urls.py:

from django.conf.urls.defaults import patterns, include, url
from django.contrib.staticfiles.views import serve as serveStatic

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    (r'^admin/',   include(admin.site.urls)),
    (r'^dbrowse/', include('dbrowse.urls')),
    (r'^static/',  serveStatic),
url (r'^$',    'core.views.viewHallo',name='home'),
)

это core \ views.py

from django.shortcuts import render_to_response
from django.template.context import RequestContext
import site

def viewHallo (request):
    pass
    return render_to_response ('core.html',
                               {'site':site,
                                'title':'i am the hallo view',
                                'content':'Hallo World!',},
                                context_instance=RequestContext(request))

с использованием оболочки или даже скрипта reverse('home') и reverse('admin:index') просто не работает.

Однако в моих шаблонах {% url home %} и {% url admin: index%} работают нормально ...

в моем приложении core У меня есть файл с именем site.py Я использую этот файл для хранения информации о сайте, поэтому мне не нужно полагаться на базу данных. Короче говоря, он содержит reverse('home'). Теперь это важно только потому, что независимо от того, где reverse() является сценарием, оболочкой или шаблоном, трассировка стека всегда содержит строку из site.py.

с какой стати джанго превышает site.py? и даже если это так, почему он спотыкается о reverse('home') ?. Интересно, что если я закомментирую строку из site.py, тогда reverse() начнет работать правильно.

что происходит ?? вот core\site.py

from django.contrib.sites.models import Site
from django.conf import settings
from django.core.urlresolvers import reverse

site = Site.objects.get(pk=settings.SITE_ID)

NAME = site.name
SLOGAN = 'it\'s a deal!'
COPY_HOLDER = 'My Name'


#(link_title, 'link_address', ['permission'])
MAIN_MENU = [['home', reverse('home'), 'core.view_tender'],
             ['admin', reverse('admin:index'), 'is_staff']]

EDIT: я выделил строку в исходном коде django, которая выдает ошибку: строка 91 в django/core/urlresolvers.py

91: lookup_view = getattr(import_module(mod_name), func_name) он запускает django importlib, который в свою очередь импортирует site.py.

Ответы [ 2 ]

2 голосов
/ 22 февраля 2011

Здесь есть несколько проблем.

reverse('home') должно работать именно так, как у вас, но ваша ошибка происходит до того, как может завершиться обратный процесс.Сначала нужно разобраться с проблемами в URL-адресе.

Существует ли core.views.viewHallo на самом деле?


Для URL-адресов администратора, name= не будет работать, потому что это включение (которое не имеет определенного URL-адреса, оно просто указывает на другой URL-адрес, поэтому reverse('admin') не будетРабота).

URL-адреса администраторов имеют пространство имен, а URL-адреса с пространством имен обращаются с помощью namespace:named_url http://docs.djangoproject.com/en/dev/topics/http/urls/#url-namespaces

Вы говорите, что работает only , что еще естьты пытаешься сделать?Чтобы отменить другие URL-адреса администратора, здесь есть определенный синтаксис: http://docs.djangoproject.com/en/dev/ref/contrib/admin/#reversing-admin-urls

url = reverse('admin:app_model_change')

Дайте мне знать, если у вас есть какие-либо вопросы.

0 голосов
/ 20 февраля 2015

Проблема в том, что вы импортируете модуль site до определения функции viewHallo. Сообщение об ошибке совершенно корректно - во время вызова reverse модуль не имеет такого члена viewHallo. Обычно модуль загружается при необходимости, и все будет хорошо, но в этом случае модуль уже находится в процессе загрузки . Это случай циклической зависимости между модулями Python.

...