所以我有这样的网址:
url(r'^(?P<loc>\w+)/(?P<ctg>\w+)/$', 'beta.views.queryCtgFromIndex'),
可以看出,在访问时,例如,/ loc / ctgx /调用queryCtgFromIndex并根据ctgx表计算某些内容
我实际上有5个表可以查询,所以有效网址可以是:
/loc/ctg1/, /loc/ctg2/, ..., /loc/ctg5/
在我看来,我正在做类似的事情:
if ctg == ctg1: do something, ctg1.objects.all() etc...
if ctg == ctg2: do something, ctg2.objects.all() etc...
...
if ctg == ctg5: do something, ctg5.objects.all() etc...
做某事代码是非常大的,我的问题是:我能以某种方式重写我的代码以摆脱五个fors并拥有干净的代码吗? ......像bash这样的东西,虚构的例子:$ ctg.objects.all()......
答案 0 :(得分:3)
contenttypes框架允许您以通用方式与模型交互,例如
my_model = contenttypes.objects.get(model='my model name')
my_model.model_class().objects.filter(...whatever you would normally do)
您可能希望使用白名单来确保只有用户无法与您进行互动。这样的用户模型,例如
if model_name not in ['list', 'of', 'allowed', 'models']:
return HttpResponseForbidden() #or 404