In urls.py
# urls like "articles/2011/tutorial03" or "articles/2011/tutorial03.html" or "articles/2011/tutorial03.htm"
urlpatterns = patterns('',
(r'articles/(?P<year>\d+)/(?P<item>[^/]+)(?:\.htm(?:l)?)?/?\$', 'articles.detail'),
)
In template:
<p><a href="{% url articles.views.detail article.year article.id %}">The Article</a></p>
- Regular expression is hard to read.
Any change of URL means to change some templates.- Redirect to the prefered URL (e.g. articles/2011/tutorial03.htm -> articles/2011/tutorial03) must developer provide itself.
source: https://docs.djangoproject.com/en/1.3/intro/tutorial03/
In bootstrap.php
$router[] = new Route('articles/<year \d+>/<item>[.htm[l]]', 'Articles:detail');
In template:
<p><a n:href="Articles:detail $article->year, $article->id">The Article</a></p>
- Route mask is easy to read.
- Any change of URL means to change one line in bootstrap.php.
- Redirect to the prefered URL (e.g. articles/2011/tutorial03.htm -> articles/2011/tutorial03) is done automatically.
I am not a Django expert, but when I first tried to move from Nette to Django, I really missed the canonical URL routing. I love this feature and Django's routing seems to be everything in the world but canonical. In fact, you can use (and in documentation you are encouraged to use) two or more different representations of URL. That makes me confused and unsure. Moreover, is there an easy way to run Django app at a different location than server root (e.g. subfolder)?