我想使用数据库查询来生成我的URL配置。类似的东西:
std::bind
然后是正则表达式:
states = State.objects.all().values_list('pk', flat=True)
我的想法是,我可以拥有以下网址:
(r'^state/(?P<state>' + '|'.join(states) + ')/$'
等。
问题是当我执行/state/ca/
/state/az/
时,上面的查询失败,抛出syncdb
。
这样做有好办法吗?我尝试过这个明显的改变,那就是:
DatabaseError
但是这不起作用,因为在正则表达式中抛出异常,而不是在查询定义中抛出异常。
想法?
答案 0 :(得分:3)
为什么需要在URL模式本身中约束它?接受所有双字母代码要好得多,并查看视图。
(r'^state/(?P<state_code>\w{2})/$'
def view_state(request, state_code):
state = get_object_or_404(State, pk=state_code)