Package: django-bootstrap-crud-templates
Django freed developers from the labor of writing boilerplate view logic with
class-based view; Bootstrap, the labor of designing aesthetic CSS+HTML
components.Django Bootstrap CRUD Templates aims to unite the two, allowing developers to
simply write simple class-based views then select, or extend, a Bootstrap
template for complete CRUD exposure of a model.Developers can even do as little as define a model including a single mixin and
run a function to generate a set of working CRUD URLs for that model (see
Automatic Generation of Views and URLs).Installationpip installdjango-bootstrap-crud-templatesAdd'bsct'in theINSTALLED_APPSlist in your project’s settings module.UsageDjango Bootstrap CRUD Templates provides a repository of Bootstrap-integrated
Django templates.These templates are designed to work directly with the context variables
provided by the Django Class-Based View and the attributes provided by the
Django model.Model RequirementsIn order to make the most use of the features, the Model should have a few
attributes defined:Instance methods:get_absolute_url:    Returns the url to view the instance.
( Minimum requirement )get_delete_url:      Returns the url to delete the instance.get_update_url:      Returns the url to update the instance.get_list_url:        Returns the url to list all instances.Class methods:get_create_url:      Returns the url to create an instance.get_allowed_fields:  Returns the list of editable fields.For example, with a delete url named ‘widget_delete’, get_delete_url may be
defined as:def get_delete_url( self ):
    return reverse( 'widget_delete', kwargs = {'pk' : self.pk } )You can define the model fields exposed to CRUD by defining
get_allowed_fields.@classmethod
def get_allowed_fields( cls ):
    """
    """
    return ['field1','field2']You can skip defining these methods by adding theBSCTModelMixin`mixin
class to your model and simply naming the corresponding URLs in the following
way:lowercasemodelname_detail: For the DetailView.lowercasemodelname_create: For the CreateView.lowercasemodelname_update: For the UpdateView.lowercasemodelname_delete: For the DeleteView.lowercasemodelname_list:   For the ListView.Note: Even with the BSCTModelMixin, it is still recommended to define
get_allowed_fields in your model, otherwise it will fallback to the risky
default of exposing ALL model fields.Customizing display of model fieldsThe default detail views simply print the value of each field.If you desire something more than the printed value for any field, simply
define a detail method (‘<field>_detail’) for that field:class Widget( models.Model )

    sku = models.IntegerField()

    def sku_detail( self ):
        return 'SKU_%d' % ( self.sku )View RequirementsTo use a template directly, as opposed to extending it, simply assign its name
to thetemplate_nameattribute of the class-based view.# in views.py
class CreateWidget( generic.CreateView ):
    model = models.Widget
    template_name = 'bsct/plain/form.html'Template RequirementsBy default, the template extends from ‘base.html’ and populates the
block BSCT_MAIN.
Therefore, you will need to have a template named ‘base.html’
and it must contain the block BSCT_MAIN# base.html
{% block BSCT_MAIN %}
{% endblock %}If you want to use the CDN-delivered version of Bootstrap included in the
package make sure your base template also defined the block BSCT_CSS# base.html
{% block BSCT_CSS %}
{% endblock %}

</head>
<body>

{% block BSCT_MAIN %}
{% endblock %}If you wish to have the template extend from a template other than ‘base.html’,
simply provide its name as the value for the context variable ‘bsct_base’.#in views.py
class CreateWidget( generic.CreateView ):
    model = models.Widget,
    template_name = 'bsct/plain/form.html'

    def get_context_data(self, **kwargs):
        context = super(CreateWidget, self).get_context_data(**kwargs)

        context[ 'bsct_base' ] = 'my_special_widget_base.html'
        return contextAutomatic Generation of Views and URLsYou can skip the manual definition of both views and their URLs by using
bsct.urls.URLGenerator to generate a set of URLs (and views) and including them in your applications urlpatterns:from bsct.urls import URLGenerator
from crud import models

bsct_patterns = URLGenerator( models.Widget ).get_urlpatterns()

urlpatterns = [
    url( '', include( bsct_patterns ) )
]You may also choose to have only a select few URLs automatically generated:bsct_patterns = URLGenerator( models.Widget ).get_urlpatterns( crud_types = 'rud')

#'c' - Refers to the Create CRUD type
#'r' - Refers to the Read/Detail CRUD type
#'u' - Refers to the Update/Edit CRUD type
#'d' - Refers to the Delete CRUD type
#'l' - Refers to the List CRUD typeTemplate CustomizationCustomizing these templates is as simple as creating your own template and
including the desired Django Bootstrap CRUD Templates template.# widget_list.html
{% extends 'bsct/plain/list.html' %}

{% block BSCT_LIST_ACTIONS %}
    <a href='{% object.use_widget %}'> Use Widget </a>
{% endblock %}The default ‘bsct/base.html’ links to a CDN-hosted minified Bootstrap
CSS file. If you prefer to use your own version, simply override the block
BSCT_BOOTSTRAP_CDN.{% block BSCT_BOOTSTRAP_CDN %}
{% endblock %}Built for developers, by developersDjango Bootstrap CRUD Templates is an open source project that ultimately aims to
host a collection of user-submitted Bootstrap template-sets for Django.If you have a set of Bootstrap templates you wish to include, simply
follow the five steps below (assuming you have a GitHub account):Fork and clonehttps://github.com/Alem/django-bootstrap-crud-templates.Ensure your set has at least two of the following templates:form.htmllist.htmldetail.htmlconfirm_delete.html(optional) Create a README.rst with a brief description of the template set and any other pertinent information ( external dependencies, author, homepage ).Place all the files in “bsct/templates/yourthemename/”.Pull.All contributed templates inherit the license of the encompassing project.