我想检查我的django项目中url模式的所有名称是否都是不同的。
我不想两次意外使用一个名字。
答案 0 :(得分:5)
安装django-extensions
并运行此命令:
python manage.py show_urls
它会显示您应用中的所有网址
计算名称出现次数:
python manage.py show_urls -f verbose|grep 'URL Name' | sort | uniq -c
答案 1 :(得分:1)
def test_url_name_not_duplicate(self):
resolver = urlresolvers.get_resolver(None)
names=defaultdict(list)
for pattern in resolveutils.walk_url_patterns(resolver.url_patterns):
if not pattern.name:
continue
names[pattern.name].append(pattern)
duplicates=dict([(name, patterns) for name, patterns in names.items() if len(patterns)>1])
self.assertFalse(duplicates, 'url patterns with duplicate names exist:\n%s' % '\n'.join(['url_name "%s":\n%s\n' % (
name, '\n'.join([' %s %s %s' % (pattern.regex.pattern, pattern.callback, inspect.getsourcefile(pattern.callback)) for pattern in patterns])) for name, patterns in sorted(duplicates.items())]))
辅助方法walk_url_patterns()
def walk_url_patterns(patterns):
for pattern in patterns:
if hasattr(pattern, 'url_patterns'):
for pattern in walk_url_patterns(pattern.url_patterns):
yield pattern
else:
yield pattern
如果存在重复项,则输出:
url_name "myquery":
^myquery/$ <function myquery> /home/user/src/foo/foo/views/query.py
^query/$ <function myquery> /home/user/src/foo/foo/views/query.py
url_name "bla":
^bla/$ <function bla> /home/user/src/foo/foo/views/bla.py
^bla2/$ <function bla2> /home/user/src/foo/foo/views/bla2.py
答案 2 :(得分:0)
只需确保目录/ project_name / project_name /中的urls.py表示如下:
url(r'^ polls /',include('polls.urls',namespace =“polls”))。
然后,您的所有应用程序都将使用不同的URL。在您的应用程序中:确保您的网址是这样的:
url(r'^ download / $',views.download,name ='download'),
url(r'^ anotherurl / $',views.download,name ='download'),
所以所有的网址都会有所不同。事实上,我不喜欢将参数放入网址的方式,比如
/ polls / question / 3 / result /
这样可以更轻松地两次使用网址名称。我会改变它
/ possl /问题/结果/?question_id = 3
答案 3 :(得分:0)
如果您将项目很好地构建到小型的django-apps中,那么这样的测试应该是,这样每个应用程序的路由都可以轻松监控。
查看James Bennett关于DjangoCon 2008的this great slides有关何时介绍新应用以及如何构建项目的一些想法。