django中views.py和urls.py的功能?

时间:2015-08-03 14:49:37

标签: python django

我是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_viewname='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'),

1 个答案:

答案 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