просто поместил упоминания о 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()
. Я использовал его для хранения настроек сайта. Я использовал файл, потому что
- Я не хотел использовать базу данных с данными, которые редко меняются.
- Если я уничтожил базу данных своих проектов, я бы не хотел, чтобы настройки моего сайта также были недоступны
С тех пор я нашел способ использовать модели для достижения двух целей.
но это всего лишь дополнительная справочная информация, на случай, если вы здесь кто-то комментируете о 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()
. но я предполагаю, что это связано с тем, что (.*)
находится в шаблоне.