2014-09-19 86 views
1

我练习如何使用Django写一个网站
我完成了一个与模型名=走时
但我仍然有很多做(如:AAAAA,BBBBB,下面CCCCC)
他们做类似的工作,只是型号名称不同如何在django中设置url以防止类似的工作?

我觉得它重复,不知道该怎么办。
如何编辑我的urls.py?请帮助我,谢谢你!

urls.py:

urlpatterns = patterns('', 
    url(r'^travel/$', views.object_list, {'model': models.Traveltime}), 
    url(r'^travel/result/$', views.object_result, {'model': models.Traveltime}), 
    url(r'^travel/update/$', views.update), 
    #I have many urls to set (below) 
    url(r'^aaaaa/$', views.object_list, {'model': models.aaaaa}), 
    url(r'^aaaaa/result/$', views.object_result, {'model': models.aaaaa}), 
    url(r'^aaaaa/update/$', views.update), 
    url(r'^bbbbb/$', views.object_list, {'model': models.bbbbb}), 
    url(r'^bbbbb/result/$', views.object_result, {'model': models.bbbbb}), 
    url(r'^bbbbb/update/$', views.update), 
    url(r'^ccccc/$', views.object_list, {'model': models.ccccc}), 
    url(r'^ccccc/result/$', views.object_result, {'model': models.ccccc}), 
    url(r'^ccccc/update/$', views.ccccc), 

views.py

def object_list(request, model): 
    obj_list = model.objects.filter(image_elect='') 
    paginator = Paginator(obj_list, 10) 
    page = request.GET.get('page') 
    try: 
     contacts = paginator.page(page) 
    except PageNotAnInteger: 
     contacts = paginator.page(1) 
    except EmptyPage: 
     contacts = paginator.page(paginator.num_pages) 
    template_name = 'filterimgs/%s_list.html' % model.__name__.lower() 
    return render_to_response(template_name, {'object_list': obj_list,"contacts": contacts}, 
          context_instance=RequestContext(request)) 

def update(request): 
    travel = Traveltime.objects.filter(title=request.POST['title']) 
    # travel.update(image_elect='asd') 
    return redirect(object_result) 

def object_result(request, model): 
    obj_list = model.objects.all() 
    paginator = Paginator(obj_list, 10) 
    page = request.GET.get('page') 
    try: 
     contacts = paginator.page(page) 
    except PageNotAnInteger: 
     contacts = paginator.page(1) 
    except EmptyPage: 
     contacts = paginator.page(paginator.num_pages) 
    template_name = 'filterimgs/%s_result.html' % model.__name__.lower() 
    return render_to_response(template_name, {'object_list': obj_list,"contacts": contacts}, 
          context_instance=RequestContext(request)) 
+0

是你收到的答案有帮助吗?你需要进一步的澄清/协助吗? – 2014-09-20 06:59:16

回答

0

Django的URL模式是正则表达式,任何分组表达式将被传递到作为附加参数相应的视图。

urlpatterns = patterns('', 
    url(r'^([a-zA-Z]+)/$', views.object_list), 
    url(r'^([a-zA-Z]+)/result/$', views.object_result), 
    url(r'^([a-zA-Z]+)/update/$', views.update), 
) 

然后在您的要求,您可以

import importlib 

def object_list(request, model_type): 
    # use the model_type which is passed in from 
    # the URL to actually grab the proper model 
    found = importlib.import_module('models.{0}'.format(model_type)) 

Python是彬彬有礼地让你导入使用的字符串模块。

此外,发现是一个蹩脚的名称,所以你应该相应地命名它取决于它的目的是什么。

+0

我尝试了但是得到了这个错误'''得到了一个意想不到的关键字参数'model'''' – user2492364 2014-09-21 13:10:20

+0

尝试编辑,很可能这个单词模型被保留在外部范围。 – 2014-09-21 22:19:07

+0

@ user2492364好吧,我意识到我仍然有您的Traveltime模型的定义,并且手动将它作为请求的一部分传入。相反,依靠包含模型名称信息的URL,您的视图定义需要预期的类型并应该查找它。 – 2014-09-21 22:22:48

相关问题