You are on page 1of 2

django_url_cheat.

txt
Page 1 of 2 Aug/2008
1 from django.conf.urls.defaults import *
2 urlpatterns = patterns('',
3 # (regular exp, function, optional dictionary, optional name)
4 # Doesn’t differentiate request method, all go to the same function
5 (r'^articles/2003/$', 'news.views.special_case_2003'),
6 # "/articles/2003" -> no match need "2003/"
7 (r'^articles/(\d{4})/$', 'news.views.year_archive'),
8 # ordering matters
9 # "/articles/2003/" -> news.views.special_case_2003, not news.views.year_archive(2003)
10 (r'^articles/special/(?P<year>\d{4})/$', 'news.views.year_archive'),
11 # "/articles/special/2003" -> news.views.year_archive(request, year='2003')
12 (r'^articles/(\d{4})/(\d{2})/$', 'news.views.month_archive'),
13 (r'^articles/(\d{4})/(\d{2})/(\d+)/$', 'news.views.article_detail'),
14 # "/articles/2003/03/3/" -> news.views.article_detail(request, '2003', '03', '3')
15 )
16 urlpatterns += patterns('sports.views', # append like a list
17 (r'^sports/2003/$', 'some_function'),
18 # "/sports/2003/" -> sports.views.some_function(request)
19 )
20
21 # Generic actions are useful if you are doing something generic such as:
22 # by default {'extra_context':{}}, add more context into extras if necessary
23 urlpatterns += patterns('django.views.generic.simple',
24 (r'^page_new/(?P<id>\d+)/$', 'direct_to_template', {'template': 'page_detail.html'}),)
25 urlpatterns += patterns('django.views.generic.simple',
26 (r'^page/(?P<id>\d+)/$', 'redirect_to', {'url': '/page_new/%(id)s/'}},)
27 urlpatterns += patterns('django.views.generic.list_detail',
28 (r'^page/all/$', 'object_list', {'queryset': Pages.objects.all() }),)
29 # default: {'paginate_by':'infinity' , 'page':'1',
30 # 'template_name':'app/model_list.html' }
31 urlpatterns += patterns('django.views.generic.list_detail',
32 (r'^page/all/(?P<id>\d+)/$', 'object_detail', {'queryset': Pages.objects.all(), 'object
_id':id }),)
33 # default: {'paginate_by':'infinity' , 'page':'1',
34 # 'template_name':'app/model_detail.html' }
35 urlpatterns += patterns('django.views.generic.create_update',
36 (r'^...$', 'create_object', {'model':SomeModel or 'form_class':SomeForm }),)
37 # default: {'post_save_redirect':object.get_absolute_url(), 'login_required':False,
38 # 'template_name':'app/model_form.html' }
39 urlpatterns += patterns('django.views.generic.create_update',
40 (r'^...$', 'update_object', {'model': / 'form_class':, 'object_id':SomeID }),)
41 # default: {'post_save_redirect':object.get_absolute_url(), 'login_required':False,
42 # 'template_name':'app/model_form.html' }
43 urlpatterns += patterns('django.views.generic.create_update',
44 (r'^...$', 'delete_object', {'model': / 'form_class':, 'object_id':SomeID }),)
45 # default: {'post_save_redirect':object.get_absolute_url(), 'login_required':False,
46 # 'template_name':'app/model_confirm_delete.html' }
47
48 # Parents are good for subdividing the work
49 urlpatterns += patterns('', # use include to add child url matchers:
50 (r'^weblog/(?P<idName>\w+)/', include('mysite.app.url')),
51 )
52 # in file app/url.py:
53 from django.conf.urls.defaults import *
54 urlpatterns = patterns('app.views',
55 (r'^$', 'blog.index'),
56 # "/weblog/me/" -> app.views.blog.index(request, idName='me')
57 (r'^post/(?P<postIndex>\d+)$', 'post.show'),
58 # "/weblog/me/12" -> app.views.post.show(request, idName='me', postIndex='12')
59 (r'^details/$', 'blog.details', {'extraData', 'foo!'})
60 # "/weblog/details/" -> app.views.blog.details(request, idName='me', extraData='foo!')
61 (r'^post/(?P<pid>\d+)/comment/(?P<cid>\d+)/$', 'post.show', {'gotoComment', 'true'}, "w
eblog-viewComment"),
62 # "/weblog/post/1/comment/1/" -> app.views.blog.details(request, idName='me', pid='1',
cid='1', gotoComment='true')

- 1 -
django_url_cheat.txt
Page 2 of 2 Aug/2008
63 # the template tag {% url weblog-viewComment pid=1,cid=1 %} returns "/weblog/post/1/com
ment/1/"
64 )
65
66 # often you will write one function which has a default parameter to save code:
67 urlpatterns = patterns('app.views',
68 (r'^$', 'blog.index'),
69 (r'^/(?P<postIndex>\d+)/$', 'blog.index'))
70 def index(request, postIndex='1')
71 ....
72
73 # often we want to find a url that will execute a function with some parameters
74 # we would use {% url function args %} in a template. in code we would use:
75 from django.core.urlresolvers import reverse
76 reverse(viewname, urlconf=None, args=None, kwargs=None)
77 def myview(request):
78 return HttpResponseRedirect(reverse('weblog-viewComment', args='pid=1,cid=1'))
79
80 # regular reference:
81 # . any char
82 # ^ start of string $ end of string
83 # * 0 or more of preceding + 1 or more of preceding
84 # ? 0 or 1 of preceding (?!..) matches when it doesnt match ..
85 # *? 0 or more, minimal match +? 1 or more, minimal match
86 # {m} exactly m of preceding {m,n} between m to n of preceding
87 # [..] eg. [abc],[a-z],[0-9a-z] [^..] matches if doesn't match [..]
88 # (..) groups what's inside (?=..) matches .. but doesn't consume it
89 # \d [0-9] (decimal digit) \D [^0-9] (non-digit)
90 # \w [a-zA-Z0-9_] (alphanumeric) \W [^a-zA-Z0-9_] (non-alphanumeric)
91 # \s [ \t\n\r\f\v] (whitespace) \S [^ \t\n\r\f\v] (non-whitespace)
92
93 # Request and Response Object
94 def index(request, index='1')
95 request.path # /weblog/me/
96 request.method # either 'GET', 'POST', 'HEAD', ...
97 request.GET['someVarName'] # whatever it should be
98 request.GET['someVarName', 'default'] # if it doesn't exist then default. also for POST
99 request.POST['someVarName']
100 request.REQUEST['someName'] # searches GET then FILES
101 request.COOKIES['attributeName']
102 request.FILES['someFilename'] # request.POST does not have files
103 # includes methods: read(num_bytes=...), chunk() and attrs: file_name, file_size
104 request.META['someMetaName']
105 # includes: CONTENT_LENGTH, CONTENT_TYPE, HTTP_ACCEPT_ENCODING, SERVER_PORT,
106 # HTTP_ACCEPT_LANGUAGE, HTTP_HOST, HTTP_REFERER, HTTP_USER_AGENT,
107 # QUERY_STRING, REMOTE_ADDR, REMOTE_HOST, REQUEST_METHOD, SERVER_NAME,
108 request.user # object: django.contrib.auth.models.User
109 request.get_full_path() # includes any stuff after the last directory /
110 request.build_absolute_uri() # includes a http://www.. bit that is read from their side
111 request.is_ajax() # major ajax libraries send a signal that a query is for ajax
112

- 2 -