2008-10-03 15 views
6

Ben oldukça standart django uygulaması var ve açıkça bir görünüme her url eşlemek zorunda kalmamak için url yönlendirme nasıl ayarlanacağını merak ediyorum.Django: Görünümlere genel bir URL yönlendirme nasıl oluşturabilirim?

Örneğin, aşağıdaki görüşlere sahip varsayalım: Project, Links, Profile, Contact. böylece

(r'^Project/$', 'mysite.app.views.project'), 
(r'^Links/$', 'mysite.app.views.links'), 
(r'^Profile/$', 'mysite.app.views.profile'), 
(r'^Contact/$', 'mysite.app.views.contact'), 

Ve: Doğrusu böyle benim urlpatterns göz istemem. Pylons, bu kadar basit olacaktır:

map.connect(':controller/:action/:id') 

Ve otomatik sağ denetleyici ve işlevini kapmak istiyorum. Django'da benzer bir şey var mı? Eğer görüş gerçekten büyük numara yoksa

+0

Bekle, hiç 'mysite.app.views.links' işaret etmek, '^ Linkler/$' Eğer istiyorsun? –

+0

Evet, kopyala/yapıştır hataları oldukça tatlı. – swilliams

cevap

5
mods = ('Project','Links','Profile','Contact') 

urlpatterns = patterns('', 
    *(('^%s/$'%n, 'mysite.app.views.%s'%n.lower()) for n in mods) 
) 
+0

Bu bana bir hata veriyor '' jeneratör 'nesnesinde' çözüm 'yok. Sanırım ne yapmaya çalıştığını biliyorum (tuple'da her bir dizge için bir yol yaz), ancak bunun yerine django'nun çözemediği bir Jeneratör oluşturuyor. – swilliams

+0

Test etmedim, jeneratörü bir * (... for ...) ile çıkarmayı deneyin. Ben – Javier

+0

cevabı düzenliyorum Şimdi bir sözdizimi hatası alıyorum. Daha önce hiç görmedim * böyle bir şey ... C işareti gibi bir işaretçiyi reddetmesi gerekiyor mu? Bunu göndermeden önce test edebilir misiniz? – swilliams

5

, açıkça yazmaktan bir stil açısından çok kötü değil.

Sen patterns fonksiyonunun önek argüman kullanarak, olsa da, sizi örnek kısaltabilirsiniz

:

def router(request, function, module): 
    m =__import__(module, globals(), locals(), [function.lower()]) 
    try: 
     return m.__dict__[function.lower()](request) 
    except KeyError: 
     raise Http404() 

:

urlpatterns = patterns('mysite.app.views', 
    (r'^Project/$', 'project'), 
    (r'^Links/$', 'links'), 
    (r'^Profile/$', 'profile'), 
    (r'^Contact/$', 'contact'), 
) 
+0

Bu doğru, ama şimdi kendimi hazır hissediyorum. :) – swilliams

5

Bu doğrultuda özel bir görünüm işlevi kullanmak mümkün olabilir ve sonra böyle bir urlconf: Bu kod denenmemiş ama inci

(r'^(?P<function>.+)/$', router, {"module": 'mysite.app.views'}), 

olduğunu

E genel fikir hatırlamalıyız rağmen çalışması gerekir:

Açık örtülü daha iyidir.

İlgili konular