django - Django中的前端原型(prototype)/骨架

标签 django templates django-templates skeleton-code

通常,我为与之合作的后端开发人员创建静态html prototype/skeleton。这有助于在实施网站之前发现UI / IA中的错误并进行昂贵的重写。

我想更进一步,并创建这些prototypes/skeletons in Django。我所说的原型/骨架是指链接的静态页面,以后可以很容易地连接到后端。

我想获得一些suggestions/ideas,以了解如何设置模板/链接,以便在实施阶段的稍后阶段可以轻松使用它们。

我想到的简短要求列表:

  • 模板的组织,而整个项目将由多个应用程序组成
  • 清洁URL调度程序和链接创建
  • 能够显示已登录/已注销状态
  • 最佳答案

    我想以一种更为传统的方式,UI设计人员和后端开发人员在开发范围的两端进行工作,并希望以一种客气的方式融合在中间的某个地方。如果您愿意编写几行代码,可以为开发人员设计整个应用程序体系结构,因为您有优势-您会立即关注用户,他们使用的数据以及开发人员。他们需要执行的互动。对于开发人员来说,这将消除很多猜测,而现在只需填补漏洞,连接点或您拥有什么。

    您应该做的第一件事是聚在一起并设定一些共同点。通常,这包括在一开始就执行模块化。掌握所有主要功能,并将其分解为几个Django应用程序,这些应用程序将包装与应用程序提供的特定功能相关的模板,视图和模型三合会。越多越好,这里就适用,所以不要担心如果您拥有很多应用程序,因为您永远不希望拥有提供太多功能/承载太多组件的单个应用程序。通常,您从registrationauthenticationprofiles(用户)之类的应用开始,然后逐步开展工作。例如,您可以将这三个文件塞入一个应用程序中,但最终会得到很多模板,很多视图,两个或三个模型,但是测试确实是一个真正的瓶颈。因此,将所有内容分解到这些应用程序存储区中,直到您感觉系统的每个部分都自然地落入了概念层面。如果您发现自己在考虑应放置的位置,或者您正在查看一个长达几页的模块,并想将其(models.pyviews.pytest.py)分解为具有许多内部模块的包装,则可能应该重构立即架构。永远记住,您在这里所做的努力是为了简化您的体系结构。

    一旦完成,您实际上已经完成了一半的工作。 Django的优点在于URL和视图之间的耦合很松散。视图本身提供了应用程序行为并简化了表示。如果您可以正确地铺开主URL并添加视图以仅生产静态模板,那么您已经做了一些出色的工作。

    这就是它的完成方式。您可以通过命名模式来抽象化URL及其映射到的视图,例如authentication:loginauthentication:logoutregistration:registerregistration:confirmregistration:activate等。这是将内部结构与所提供的所有行为联系在一起的方式,这些不应该随时可能更改。然后,您可以始终更改authentication:login的URL模式,更改该模式映射到的视图,但是通过内部名称引用它,因此,例如,可以用刚好显示的视图替换刚刚搅动静态模板的视图而无需必须对您的代码进行任何其他修改。

    因此,这是现实生活中的工作方式:

  • 集思广益,决定将提供的应用程序和功能,并查看您的决定。
  • core应用程序开始,该应用程序将承载一些项目特定的功能,例如基本模板和根/视图。
  • 创建一个/core/templates/core/base.html,它将加载将在站点范围内使用的所有通用CSS / JS文件,它将定义页眉,内容和页脚节(模板块),并将使用上下文变量来处理页面元数据,例如标题,说明,关键字和漫游器。典型的“一个模板全部统治”,所有页面的结构/表示中将出现的位。
  • 创建一个简单的/core/temaplates/core/welcome.html,它扩展了核心模板并显示“Hello world!”。在内容区域。
  • 将以下内容添加到/core/urls.py中:
    from django.conf.urls.defaults import *
    from django.views.generic import TemplateView  
    
    
    urlpatterns = patterns('',
    
        # Welcome
        url(
            r'^$', TemplateView.as_view(template_name='core/welcome.html'),
            name='welcome'
        ),
    
    )
    
  • 将其连接到主要/urls.py中:
    from django.conf.urls.defaults import *
    from django.contrib import admin
    
    
    admin.autodiscover()
    
    urlpatterns = patterns('',
        url(ur'^', include('core.urls', namespace='core')),
        url(ur'^admin/doc/', include('django.contrib.admindocs.urls')),
        url(ur'^admin/', include(admin.site.urls)),
    )
    
  • 按下http://localhost:8080/,看到“Hello World!”,陶醉在温暖的模糊感觉中。
  • 对其余应用程序重复相同的操作:创建应用程序,创建模式,命名,将它们映射到静态模板,将其挂接到主urlconf中的名称空间。

  • 您可以将视图进一步推向开发人员的生产环境。它可能取决于开发人员及其样式准则,但我希望/urls.py保持干净,除了模式,名称和视图映射外。您的/core/urls.py可能类似于:
    from django.conf.urls.defaults import *
    from core import views
    
    
    urlpatterns = patterns('',
    
        # Welcome
        url(
            r'^$', views.Welcome.as_view(),
            name='welcome'
        ),
    
    )
    

    使用以下内容编辑/core/views.py:
    from django.core.views.generic import TemplateView
    
    class WelcomeView(TemplateView):
    
        template_name='core/welcome.html'
    
        extra_context={
            'page_title': 'Welcome!',
            'page_keywords': 'relevant,page,keywords',
            'page_description': 'Something equally relevant',
        }
    
        def get_context_data(self, **kwargs):
            context = super(WelcomeView, self).get_context_data(**kwargs)
    
            context.update(self.extra_context)
            return context
    

    这是一个坚固的存根视图,其中包含页面元数据!绝对可以从开发者那里赚到啤酒的东西。继续对所有视图执行此操作,以抽出静态模板。当有人要完成视图的确定时,他们只需要从其他视图类继承,添加缺失的功能,扩展上下文,修改模板并瞧瞧就可以生产了。

    要使之成为可能,您无需进行大量的前期学习,但实际上,它确实消除了开发人员的大量猜测,而开发人员自然更关心构建其余的应用程序。它也很简单,可以真正发挥作用,我想没有人会介意让您完成所有这些工作。作为补充,您可能不会对模板上下文如何在视图中填充一无所知,因此即使您可以开始展示更复杂的视图,或者至少能够阅读它们。

    关于django - Django中的前端原型(prototype)/骨架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5112490/

    相关文章:

    C++ 模板类型是否为指针

    python - 模板中的 GAE "for each"?

    python - 无法使用 django-pyodbc 从 django 查询 SQL Server

    Django CreateView在选择字段中过滤外键

    django - 如何正确设置环境变量 Gitlab CI/CD 和 Docker

    c++ - 为什么我们有类型不匹配?

    python - 如何从 DateTimeField 中提取年、月、日、小时和分钟?

    c++ - 跨编译单元不同的内联成员函数是否会破坏二进制兼容性?

    django - 安全呈现用户提供的 django 模板

    Django 模板计算从现在到特定日期的天数