我是djnago的新手。我想了解openstack项目。在一个地方,他们通过AdminIndexView
中的网址呼叫班级urls.py
。我了解网址的工作原理,但在class AdminIndexView
中有一些方法,例如def get_data(self):
,def has_more_data
。我想知道他们在哪里称这些方法。在urls.py
中,他们使用url(r'^$', views.AdminIndexView.as_view(), name='index')
之类的内容。 as_view
和name='index'
的含义是什么?
views.py
class AdminIndexView(tables.DataTableView):
table_class = project_tables.AdminInstancesTable
template_name = 'admin/instances/index.html'
page_title = _("Instances")
def has_more_data(self, table):
return self._more
def get_data(self):
instances = []
marker = self.request.GET.get(
project_tables.AdminInstancesTable._meta.pagination_param, None)
search_opts = self.get_filters({'marker': marker, 'paginate': True})
# Gather our tenants to correlate against IDs
try:
tenants, has_more = api.keystone.tenant_list(self.request)
except Exception:
tenants = []
msg = _('Unable to retrieve instance project information.')
exceptions.handle(self.request, msg)
if 'project' in search_opts:
ten_filter_ids = [t.id for t in tenants
if t.name == search_opts['project']]
del search_opts['project']
if len(ten_filter_ids) > 0:
search_opts['tenant_id'] = ten_filter_ids[0]
else:
self._more = False
return []
urls.py
from django.conf.urls import patterns
from django.conf.urls import url
from openstack_dashboard.dashboards.admin.instances import views
INSTANCES = r'^(?P<instance_id>[^/]+)/%s$'
urlpatterns = patterns(
'openstack_dashboard.dashboards.admin.instances.views',
url(r'^$', views.AdminIndexView.as_view(), name='index'),
答案 0 :(得分:0)
在Django中,您可以将URL模式连接到处理程序。这些处理程序要么是功能都可以“基于类”。在短期基础上的观点是好的!和.as_view()基本上设置类来接受来自URL模式的请求。 我建议您在这里查看有关基于班级的观点的更多信息:https://docs.djangoproject.com/en/1.8/topics/class-based-views/。
name参数是您可以为URL提供的任意名称,以便您以后可以找到它,例如,如果您需要构建某个视图的URL而不是每次都自己创建URL,您可以调用一个方法。
reverse("<app_name>:<name>")
其中app_name是应用程序的名称,name是name参数中的值(在Django 1.8中,url的名称由app_name隔开名称)
对于get_data方法,这些方法由视图的超类调用,请参阅此处以获取更多信息: http://docs.openstack.org/developer/horizon/topics/tables.html#fetching-the-row-data