我的urls.py
url(r'^foo/$', FooView.as_view(), name='foo-view'),
url(r'^bar1/$', BarView.as_view(), name='bar-one-view'),
url(r'^bar2/$', BarView.as_view(), name='bar-two-view'),
现在我想知道,哪些名字被连接到CBV-Class(或函数),所以我可以这样做:
how_to_do_this(BarView.as_view)
应返回[' bar-one-view',' bar-two-view']
答案 0 :(得分:0)
我的问题:URLconf通常使用类似urlpatterns
的变量定义,该变量是类RegexURLPattern
的对象列表。这个类的一个成员是callback
方法。您需要将urlpatterns
导入到脚本中,然后遍历所有RegexURLPattern
个对象,直到获得与可调用对象(CBV或FBV)的匹配,之后您可以检查name
成员(假设它是在URLconf中定义的)。这应该给你视图的名称。
但是,正如我所说,我想不出你为什么要这样做。; - )
答案 1 :(得分:0)
这就是它现在对我有用的方式。也许有一个更好的?
一个mixin,为视图函数提供一个自定义装饰器,用于存储模块和类:
public ActionResult NewCourseTitle()
{
ViewBag.Type = new SelectList(db.CourseTypes, "CourseTypeID", "Type");
return View();
}
//
//Post:
[HttpPost]
public ActionResult NewCourseTitle(CourseTitle courseTitle)
{
if (ModelState.IsValid)
{
db.CourseTitles.AddObject(courseTitle);
db.SaveChanges();
return RedirectToAction("Create", "Course");
}
return View();
}
所以当app / dir / whatever / views.py中的CBV有这个混合时......
class SignatureMixin(object):
@classmethod
view_func = super(SignatureMixin, cls).as_view(**initkwargs)
signature = "%s.%s" % (inspect.getmodule(cls).__name__, cls.__name__ )
view_func.__signature__ = signature
return view_func
...我可以通过urls.urlpatterns递归回调的条目:
class SomeView(SignatureMixin,View):
...