не работает django reverse () - PullRequest
       2

не работает django reverse ()

0 голосов
/ 23 февраля 2011

просто поместил упоминания о reverse() где-нибудь в моем проекте, и так было {% url%}. С тех пор я добился определенного прогресса, если вы прокрутите вниз!


соответствующие файлы

корень / urls.py

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

# Uncomment the next two lines to enable the admin:
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'),
)

корень / ядро ​​/ views.py

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

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

Примечания

Я впервые заметил сбой reverse(), когда в моем проекте был файл site.py, который пытался вызвать reverse(). Я использовал его для хранения настроек сайта. Я использовал файл, потому что

  1. Я не хотел использовать базу данных с данными, которые редко меняются.
  2. Если я уничтожил базу данных своих проектов, я бы не хотел, чтобы настройки моего сайта также были недоступны

С тех пор я нашел способ использовать модели для достижения двух целей.

но это всего лишь дополнительная справочная информация, на случай, если вы здесь кто-то комментируете о site.py.

обновление 25/02/11

ну вот и все!

первое замечание, что urls.py имеет (r'^dbrowse/', include('dbrowse.urls')). это привело к сбою reverse(). Я объясню позже ...

Что касается тега шаблона, я обнаружил, что {% url %} не принимает переменные. Я воспринимал это как должное. На самом деле, когда я тестировал тег шаблона, я просто входил и жестко кодировал что-то вроде {% url 'home' %}, что бы работало, а иногда я тестировал {% url home %} с home как переменная. Я даже не вижу в этом совершенно разных тестовых случаев.

Но теперь я знаю, {% load url from future %} позволяет использовать переменные в качестве аргументов для {% url %}

В любом случае, теперь вернемся к (r'^dbrowse/', include('dbrowse.urls')) в urls.py

У меня была такая папка

project\
    --dbrowse\
        __init__.py
        urls.py

теперь это dbrowse / urls.py

from django.conf.urls.defaults import patterns, url
#databrowse
from django.contrib import databrowse

databrowse.site.register(MyModel)

urlpatterns = patterns('',
                       url(r'(.*)',databrowse.site.root, name='dbrowse'),)

это была моя попытка избежать размещения databrowse.site.register(MyModel) в корне моего проекта urls.py, как предложено в документации. Мне не нравится идея загрязнения моих проектов main urls.py с databrowse.site.register(MyModel)

однако я до сих пор не понимаю, почему это привело к поломке reverse(). но я предполагаю, что это связано с тем, что (.*) находится в шаблоне.

...