Url for a section¶
Sections will appear in the urlpatterns based on the url, name and
parent it has on itself; and depending on some of the
options it has.
The url and name attributes are assigned when the section is created
, and parent is assigned implicityly when you add
children to a section.
How the url is interpreted¶
The url for each section is built when the urlpatterns are created and are generated by concatenating the urls from the lineage of parent sections to the section we’re adding a url for.
If there is no parents and our section’s url is None
then it is replaced with ‘.*’.
If there are no parents and our section’s url is an empty string
then it is replaced with ‘^$’.
Otherwise, all duplicate slashes are remove , it is prefixed with a ‘^’ and forced to end with ‘/$’.
If you set catch_all to False, then it won’t append the url with
a / or $
Section url options¶
You can affect how the section is added via an
include
via the app_name and namespace options into “section.configure”
See the Splitter section for when that would happen.
Configure also provides the match option which will make that
section appear as a named regex group in the url:
# This section here has configured match to "blah"
Section(r'\d+').configure(match="blah")
So for this section, it’s url part will look like:
r"(?P<blah>\d+)"
Note
You can see what url part a section will have by doing:
>>> from cwf.sections import Section
>>> from cwf.sections.pattern_list import PatternList
>>> section = Section("\d+").configure(match="blah")
>>> PatternList(section).url_part()
r'(?P<blah>\d+)'
Ommitting a section from urlpatterns¶
A section will be ommitted entirely from the urlpatterns if it has no configured view but all it’s children will still appear in the urlpatterns.
For example:
from cwf.sections import Section
section = Section().configure(module="webthing.views")
numbers = section.add('numbers')
numbers.add("one").configure(target="one")
numbers.add("two").configure(target="two")
urlpatterns = section.patterns()
Is equivalent to:
from django.conf.urls import patterns
urlpatterns = patterns(''
, (r'^numbers/one/$', 'webthing.views.one')
, (r'^numbers/two/$', 'webthing.views.two')
)