新增:打包编译功能
This commit is contained in:
267
backend/templates/rest_framework/admin.html
Normal file
267
backend/templates/rest_framework/admin.html
Normal file
@@ -0,0 +1,267 @@
|
||||
{% load static %}
|
||||
{% load i18n %}
|
||||
{% load rest_framework %}
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
{% block head %}
|
||||
|
||||
{% block meta %}
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta name="robots" content="NONE,NOARCHIVE" />
|
||||
{% endblock %}
|
||||
|
||||
<title>{% block title %}Django REST framework{% endblock %}</title>
|
||||
|
||||
{% block style %}
|
||||
{% block bootstrap_theme %}
|
||||
<link rel="stylesheet" type="text/css" href="{% static "rest_framework/css/bootstrap.min.css" %}"/>
|
||||
<link rel="stylesheet" type="text/css" href="{% static "rest_framework/css/bootstrap-tweaks.css" %}"/>
|
||||
{% endblock %}
|
||||
<link rel="stylesheet" type="text/css" href="{% static "rest_framework/css/prettify.css" %}"/>
|
||||
<link rel="stylesheet" type="text/css" href="{% static "rest_framework/css/default.css" %}"/>
|
||||
{% endblock %}
|
||||
|
||||
{% endblock %}
|
||||
</head>
|
||||
|
||||
{% block body %}
|
||||
<body class="{% block bodyclass %}{% endblock %}">
|
||||
<div class="wrapper">
|
||||
{% block navbar %}
|
||||
<div class="navbar navbar-static-top {% block bootstrap_navbar_variant %}navbar-inverse{% endblock %}">
|
||||
<div class="container">
|
||||
<span>
|
||||
{% block branding %}
|
||||
<a class='navbar-brand' rel="nofollow" href='https://www.django-rest-framework.org/'>
|
||||
Django REST framework
|
||||
</a>
|
||||
{% endblock %}
|
||||
</span>
|
||||
<ul class="nav navbar-nav pull-right">
|
||||
{% block userlinks %}
|
||||
{% if user.is_authenticated %}
|
||||
{% optional_logout request user %}
|
||||
{% else %}
|
||||
{% optional_login request %}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
<div class="container">
|
||||
{% block breadcrumbs %}
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb_name, breadcrumb_url in breadcrumblist %}
|
||||
{% if forloop.last %}
|
||||
<li class="active"><a href="{{ breadcrumb_url }}">{{ breadcrumb_name }}</a></li>
|
||||
{% else %}
|
||||
<li><a href="{{ breadcrumb_url }}">{{ breadcrumb_name }}</a></li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endblock %}
|
||||
|
||||
<!-- Content -->
|
||||
<div id="content">
|
||||
{% if 'GET' in allowed_methods %}
|
||||
<form id="get-form" class="pull-right">
|
||||
<fieldset>
|
||||
<div class="btn-group format-selection">
|
||||
<button class="btn btn-primary dropdown-toggle" data-toggle="dropdown">
|
||||
Format <span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu">
|
||||
{% for format in available_formats %}
|
||||
<li>
|
||||
<a class="format-option"
|
||||
href='{% add_query_param request api_settings.URL_FORMAT_OVERRIDE format %}'
|
||||
rel="nofollow">
|
||||
{{ format }}
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
</fieldset>
|
||||
</form>
|
||||
{% endif %}
|
||||
|
||||
{% if post_form %}
|
||||
<button type="button" class="button-form btn btn-primary" data-toggle="modal" data-target="#createModal">
|
||||
<span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Create
|
||||
</button>
|
||||
{% endif %}
|
||||
|
||||
{% if put_form %}
|
||||
<button type="button" class="button-form btn btn-primary" data-toggle="modal" data-target="#editModal">
|
||||
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span> Edit
|
||||
</button>
|
||||
{% endif %}
|
||||
|
||||
{% if delete_form %}
|
||||
<form class="button-form" action="{{ request.get_full_path }}" data-method="DELETE">
|
||||
<button class="btn btn-danger">
|
||||
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span> Delete
|
||||
</button>
|
||||
</form>
|
||||
{% endif %}
|
||||
|
||||
{% if extra_actions %}
|
||||
<div class="dropdown" style="float: right; margin-right: 10px">
|
||||
<button class="btn btn-default" id="extra-actions-menu" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
|
||||
{% trans "Extra Actions" %}
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu" aria-labelledby="extra-actions-menu">
|
||||
{% for action_name, url in extra_actions|items %}
|
||||
<li><a href="{{ url }}">{{ action_name }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if filter_form %}
|
||||
<button style="float: right; margin-right: 10px" data-toggle="modal" data-target="#filtersModal" class="btn btn-default">
|
||||
<span class="glyphicon glyphicon-wrench" aria-hidden="true"></span>
|
||||
{% trans "Filters" %}
|
||||
</button>
|
||||
{% endif %}
|
||||
|
||||
<div class="content-main">
|
||||
<div class="page-header">
|
||||
<h1>{{ name }}</h1>
|
||||
</div>
|
||||
|
||||
<div style="float:left">
|
||||
{% block description %}
|
||||
{{ description }}
|
||||
{% endblock %}
|
||||
</div>
|
||||
|
||||
{% if paginator %}
|
||||
<nav style="float: right">
|
||||
{% get_pagination_html paginator %}
|
||||
</nav>
|
||||
{% endif %}
|
||||
|
||||
<div class="request-info" style="clear: both" >
|
||||
{% if style == 'list' %}
|
||||
{% include "rest_framework/admin/list.html" %}
|
||||
{% else %}
|
||||
{% include "rest_framework/admin/detail.html" %}
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
{% if paginator %}
|
||||
<nav style="float: right">
|
||||
{% get_pagination_html paginator %}
|
||||
</nav>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<!-- END Content -->
|
||||
</div><!-- /.container -->
|
||||
</div><!-- ./wrapper -->
|
||||
|
||||
<!-- Create Modal -->
|
||||
<div class="modal fade" id="createModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
|
||||
<h4 class="modal-title" id="myModalLabel">Create</h4>
|
||||
</div>
|
||||
<form action="{{ request.get_full_path }}" method="POST" enctype="multipart/form-data" class="form-horizontal" novalidate>
|
||||
<div class="modal-body">
|
||||
<fieldset>
|
||||
{% csrf_token %}
|
||||
{{ post_form }}
|
||||
</fieldset>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
||||
<button type="submit" class="btn btn-primary">Save</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Edit Modal -->
|
||||
<div class="modal fade" id="editModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
|
||||
<h4 class="modal-title" id="myModalLabel">Edit</h4>
|
||||
</div>
|
||||
<form action="{{ request.get_full_path }}" data-method="PUT" enctype="multipart/form-data" class="form-horizontal" novalidate>
|
||||
<div class="modal-body">
|
||||
<fieldset>
|
||||
{{ put_form }}
|
||||
</fieldset>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
||||
<button type="submit" class="btn btn-primary">Save</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if error_form %}
|
||||
<!-- Errors Modal -->
|
||||
<div class="modal" id="errorModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
|
||||
<h4 class="modal-title" id="myModalLabel">{{ error_title }}</h4>
|
||||
</div>
|
||||
<form action="{{ request.get_full_path }}" data-method="{{ request.method }}" enctype="multipart/form-data" class="form-horizontal" novalidate>
|
||||
<div class="modal-body">
|
||||
<fieldset>
|
||||
{{ error_form }}
|
||||
</fieldset>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
||||
<button type="submit" class="btn btn-primary">Save</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if filter_form %}
|
||||
{{ filter_form }}
|
||||
{% endif %}
|
||||
|
||||
{% block script %}
|
||||
<script>
|
||||
window.drf = {
|
||||
csrfHeaderName: "{{ csrf_header_name|default:'X-CSRFToken' }}",
|
||||
csrfToken: "{{ csrf_token }}"
|
||||
};
|
||||
</script>
|
||||
<script src="{% static "rest_framework/js/jquery-3.5.1.min.js" %}"></script>
|
||||
<script src="{% static "rest_framework/js/ajax-form.js" %}"></script>
|
||||
<script src="{% static "rest_framework/js/csrf.js" %}"></script>
|
||||
<script src="{% static "rest_framework/js/bootstrap.min.js" %}"></script>
|
||||
<script src="{% static "rest_framework/js/prettify-min.js" %}"></script>
|
||||
<script src="{% static "rest_framework/js/default.js" %}"></script>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('form').ajaxForm();
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
</body>
|
||||
{% endblock %}
|
||||
</html>
|
||||
10
backend/templates/rest_framework/admin/detail.html
Normal file
10
backend/templates/rest_framework/admin/detail.html
Normal file
@@ -0,0 +1,10 @@
|
||||
{% load rest_framework %}
|
||||
<table class="table table-striped">
|
||||
<tbody>
|
||||
{% for key, value in results|items %}
|
||||
{% if key in details %}
|
||||
<tr><th>{{ key|capfirst }}</th><td {{ value|add_nested_class }}>{{ value|format_value }}</td></tr>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
11
backend/templates/rest_framework/admin/dict_value.html
Normal file
11
backend/templates/rest_framework/admin/dict_value.html
Normal file
@@ -0,0 +1,11 @@
|
||||
{% load rest_framework %}
|
||||
<table class="table table-striped">
|
||||
<tbody>
|
||||
{% for k, v in value|items %}
|
||||
<tr>
|
||||
<th>{{ k|format_value }}</th>
|
||||
<td>{{ v|format_value }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
26
backend/templates/rest_framework/admin/list.html
Normal file
26
backend/templates/rest_framework/admin/list.html
Normal file
@@ -0,0 +1,26 @@
|
||||
{% load rest_framework %}
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<tr>{% for column in columns%}<th>{{ column|capfirst }}</th>{% endfor %}<th class="col-xs-1"></th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for row in results %}
|
||||
<tr>
|
||||
{% for key, value in row|items %}
|
||||
{% if key in columns %}
|
||||
<td {{ value|add_nested_class }} >
|
||||
{{ value|format_value }}
|
||||
</td>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
<td>
|
||||
{% if row.url %}
|
||||
<a href="{{ row.url }}"><span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span></a>
|
||||
{% else %}
|
||||
<span class="glyphicon glyphicon-chevron-right text-muted" aria-hidden="true"></span>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
11
backend/templates/rest_framework/admin/list_value.html
Normal file
11
backend/templates/rest_framework/admin/list_value.html
Normal file
@@ -0,0 +1,11 @@
|
||||
{% load rest_framework %}
|
||||
<table class="table table-striped">
|
||||
<tbody>
|
||||
{% for item in value %}
|
||||
<tr>
|
||||
<th>{{ forloop.counter0 }}</th>
|
||||
<td>{{ item|format_value }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -0,0 +1,2 @@
|
||||
{% load rest_framework %}
|
||||
{% for item in value %}{% if not forloop.first%},{% endif %} {{item|format_value}}{% endfor %}
|
||||
3
backend/templates/rest_framework/api.html
Normal file
3
backend/templates/rest_framework/api.html
Normal file
@@ -0,0 +1,3 @@
|
||||
{% extends "rest_framework/base.html" %}
|
||||
|
||||
{# Override this template in your own templates directory to customize #}
|
||||
311
backend/templates/rest_framework/base.html
Normal file
311
backend/templates/rest_framework/base.html
Normal file
@@ -0,0 +1,311 @@
|
||||
{% load static %}
|
||||
{% load i18n %}
|
||||
{% load rest_framework %}
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
{% block head %}
|
||||
|
||||
{% block meta %}
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta name="robots" content="NONE,NOARCHIVE" />
|
||||
{% endblock %}
|
||||
|
||||
<title>{% block title %}{% if name %}{{ name }} – {% endif %}Django REST framework{% endblock %}</title>
|
||||
|
||||
{% block style %}
|
||||
{% block bootstrap_theme %}
|
||||
<link rel="stylesheet" type="text/css" href="{% static "rest_framework/css/bootstrap.min.css" %}"/>
|
||||
<link rel="stylesheet" type="text/css" href="{% static "rest_framework/css/bootstrap-tweaks.css" %}"/>
|
||||
{% endblock %}
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="{% static "rest_framework/css/prettify.css" %}"/>
|
||||
<link rel="stylesheet" type="text/css" href="{% static "rest_framework/css/default.css" %}"/>
|
||||
{% if code_style %}<style>{{ code_style }}</style>{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% endblock %}
|
||||
</head>
|
||||
|
||||
{% block body %}
|
||||
<body class="{% block bodyclass %}{% endblock %}">
|
||||
|
||||
<div class="wrapper">
|
||||
{% block navbar %}
|
||||
<div class="navbar navbar-static-top {% block bootstrap_navbar_variant %}navbar-inverse{% endblock %}"
|
||||
role="navigation" aria-label="{% trans "navbar" %}">
|
||||
<div class="container">
|
||||
<span>
|
||||
{% block branding %}
|
||||
<a class='navbar-brand' rel="nofollow" href='https://www.django-rest-framework.org/'>
|
||||
Django REST framework
|
||||
</a>
|
||||
{% endblock %}
|
||||
</span>
|
||||
<ul class="nav navbar-nav pull-right">
|
||||
{% block userlinks %}
|
||||
{% if user.is_authenticated %}
|
||||
{% optional_logout request user %}
|
||||
{% else %}
|
||||
{% optional_login request %}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
<div class="container">
|
||||
{% block breadcrumbs %}
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb_name, breadcrumb_url in breadcrumblist %}
|
||||
{% if forloop.last %}
|
||||
<li class="active"><a href="{{ breadcrumb_url }}">{{ breadcrumb_name }}</a></li>
|
||||
{% else %}
|
||||
<li><a href="{{ breadcrumb_url }}">{{ breadcrumb_name }}</a></li>
|
||||
{% endif %}
|
||||
{% empty %}
|
||||
{% block breadcrumbs_empty %} {% endblock breadcrumbs_empty %}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endblock %}
|
||||
|
||||
<!-- Content -->
|
||||
<div id="content" role="main" aria-label="{% trans "content" %}">
|
||||
{% block content %}
|
||||
|
||||
<div class="region" aria-label="{% trans "request form" %}">
|
||||
{% block request_forms %}
|
||||
|
||||
{% if 'GET' in allowed_methods %}
|
||||
<form id="get-form" class="pull-right">
|
||||
<fieldset>
|
||||
{% if api_settings.URL_FORMAT_OVERRIDE %}
|
||||
<div class="btn-group format-selection">
|
||||
<a class="btn btn-primary js-tooltip" href="{{ request.get_full_path }}" rel="nofollow" title="Make a GET request on the {{ name }} resource">GET</a>
|
||||
|
||||
<button class="btn btn-primary dropdown-toggle js-tooltip" data-toggle="dropdown" title="Specify a format for the GET request">
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu">
|
||||
{% for format in available_formats %}
|
||||
<li>
|
||||
<a class="js-tooltip format-option" href="{% add_query_param request api_settings.URL_FORMAT_OVERRIDE format %}" rel="nofollow" title="Make a GET request on the {{ name }} resource with the format set to `{{ format }}`">{{ format }}</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% else %}
|
||||
<a class="btn btn-primary js-tooltip" href="{{ request.get_full_path }}" rel="nofollow" title="Make a GET request on the {{ name }} resource">GET</a>
|
||||
{% endif %}
|
||||
</fieldset>
|
||||
</form>
|
||||
{% endif %}
|
||||
|
||||
{% if options_form %}
|
||||
<form class="button-form" action="{{ request.get_full_path }}" data-method="OPTIONS">
|
||||
<button class="btn btn-primary js-tooltip" title="Make an OPTIONS request on the {{ name }} resource">OPTIONS</button>
|
||||
</form>
|
||||
{% endif %}
|
||||
|
||||
{% if delete_form %}
|
||||
<button class="btn btn-danger button-form js-tooltip" title="Make a DELETE request on the {{ name }} resource" data-toggle="modal" data-target="#deleteModal">DELETE</button>
|
||||
|
||||
<!-- Delete Modal -->
|
||||
<div class="modal fade" id="deleteModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-body">
|
||||
<h4 class="text-center">Are you sure you want to delete this {{ name }}?</h4>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
|
||||
<form class="button-form" action="{{ request.get_full_path }}" data-method="DELETE">
|
||||
<button class="btn btn-danger">Delete</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if extra_actions %}
|
||||
<div class="dropdown" style="float: right; margin-right: 10px">
|
||||
<button class="btn btn-default" id="extra-actions-menu" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
|
||||
{% trans "Extra Actions" %}
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu" aria-labelledby="extra-actions-menu">
|
||||
{% for action_name, url in extra_actions|items %}
|
||||
<li><a href="{{ url }}">{{ action_name }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if filter_form %}
|
||||
<button style="float: right; margin-right: 10px" data-toggle="modal" data-target="#filtersModal" class="btn btn-default">
|
||||
<span class="glyphicon glyphicon-wrench" aria-hidden="true"></span>
|
||||
{% trans "Filters" %}
|
||||
</button>
|
||||
{% endif %}
|
||||
|
||||
{% endblock request_forms %}
|
||||
</div>
|
||||
|
||||
<div class="content-main" role="main" aria-label="{% trans "main content" %}">
|
||||
<div class="page-header">
|
||||
<h1>{{ name }}</h1>
|
||||
</div>
|
||||
<div style="float:left">
|
||||
{% block description %}
|
||||
{{ description }}
|
||||
{% endblock %}
|
||||
</div>
|
||||
|
||||
{% if paginator %}
|
||||
<nav style="float: right">
|
||||
{% get_pagination_html paginator %}
|
||||
</nav>
|
||||
{% endif %}
|
||||
|
||||
<div class="request-info" style="clear: both" aria-label="{% trans "request info" %}">
|
||||
<pre class="prettyprint"><b>{{ request.method }}</b> {{ request.get_full_path }}</pre>
|
||||
</div>
|
||||
|
||||
<div class="response-info" aria-label="{% trans "response info" %}">
|
||||
<pre class="prettyprint"><span class="meta nocode"><b>HTTP {{ response.status_code }} {{ response.status_text }}</b>{% for key, val in response_headers|items %}
|
||||
<b>{{ key }}:</b> <span class="lit">{{ val|break_long_headers|urlize }}</span>{% endfor %}
|
||||
|
||||
</span>{{ content|urlize }}</pre>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if display_edit_forms %}
|
||||
{% if post_form or raw_data_post_form %}
|
||||
<div {% if post_form %}class="tabbable"{% endif %}>
|
||||
{% if post_form %}
|
||||
<ul class="nav nav-tabs form-switcher">
|
||||
<li>
|
||||
<a name='html-tab' href="#post-object-form" data-toggle="tab">HTML form</a>
|
||||
</li>
|
||||
<li>
|
||||
<a name='raw-tab' href="#post-generic-content-form" data-toggle="tab">Raw data</a>
|
||||
</li>
|
||||
</ul>
|
||||
{% endif %}
|
||||
|
||||
<div class="well tab-content">
|
||||
{% if post_form %}
|
||||
<div class="tab-pane" id="post-object-form">
|
||||
{% with form=post_form %}
|
||||
<form action="{{ request.get_full_path }}" method="POST" enctype="multipart/form-data" class="form-horizontal" novalidate>
|
||||
<fieldset>
|
||||
{% csrf_token %}
|
||||
{{ post_form }}
|
||||
<div class="form-actions">
|
||||
<button class="btn btn-primary js-tooltip" title="Make a POST request on the {{ name }} resource">POST</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
</form>
|
||||
{% endwith %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div {% if post_form %}class="tab-pane"{% endif %} id="post-generic-content-form">
|
||||
{% with form=raw_data_post_form %}
|
||||
<form action="{{ request.get_full_path }}" method="POST" class="form-horizontal">
|
||||
<fieldset>
|
||||
{% include "rest_framework/raw_data_form.html" %}
|
||||
<div class="form-actions">
|
||||
<button class="btn btn-primary js-tooltip" title="Make a POST request on the {{ name }} resource">POST</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
</form>
|
||||
{% endwith %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if put_form or raw_data_put_form or raw_data_patch_form %}
|
||||
<div {% if put_form %}class="tabbable"{% endif %}>
|
||||
{% if put_form %}
|
||||
<ul class="nav nav-tabs form-switcher">
|
||||
<li>
|
||||
<a name='html-tab' href="#put-object-form" data-toggle="tab">HTML form</a>
|
||||
</li>
|
||||
<li>
|
||||
<a name='raw-tab' href="#put-generic-content-form" data-toggle="tab">Raw data</a>
|
||||
</li>
|
||||
</ul>
|
||||
{% endif %}
|
||||
|
||||
<div class="well tab-content">
|
||||
{% if put_form %}
|
||||
<div class="tab-pane" id="put-object-form">
|
||||
<form action="{{ request.get_full_path }}" data-method="PUT" enctype="multipart/form-data" class="form-horizontal" novalidate>
|
||||
<fieldset>
|
||||
{{ put_form }}
|
||||
<div class="form-actions">
|
||||
<button class="btn btn-primary js-tooltip" title="Make a PUT request on the {{ name }} resource">PUT</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
</form>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div {% if put_form %}class="tab-pane"{% endif %} id="put-generic-content-form">
|
||||
{% with form=raw_data_put_or_patch_form %}
|
||||
<form action="{{ request.get_full_path }}" data-method="PUT" class="form-horizontal">
|
||||
<fieldset>
|
||||
{% include "rest_framework/raw_data_form.html" %}
|
||||
<div class="form-actions">
|
||||
{% if raw_data_put_form %}
|
||||
<button class="btn btn-primary js-tooltip" title="Make a PUT request on the {{ name }} resource">PUT</button>
|
||||
{% endif %}
|
||||
{% if raw_data_patch_form %}
|
||||
<button data-method="PATCH" class="btn btn-primary js-tooltip" title="Make a PATCH request on the {{ name }} resource">PATCH</button>
|
||||
{% endif %}
|
||||
</div>
|
||||
</fieldset>
|
||||
</form>
|
||||
{% endwith %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endblock content %}
|
||||
</div><!-- /.content -->
|
||||
</div><!-- /.container -->
|
||||
</div><!-- ./wrapper -->
|
||||
|
||||
{% if filter_form %}
|
||||
{{ filter_form }}
|
||||
{% endif %}
|
||||
|
||||
{% block script %}
|
||||
<script>
|
||||
window.drf = {
|
||||
csrfHeaderName: "{{ csrf_header_name|default:'X-CSRFToken' }}",
|
||||
csrfToken: "{% if request %}{{ csrf_token }}{% endif %}"
|
||||
};
|
||||
</script>
|
||||
<script src="{% static "rest_framework/js/jquery-3.5.1.min.js" %}"></script>
|
||||
<script src="{% static "rest_framework/js/ajax-form.js" %}"></script>
|
||||
<script src="{% static "rest_framework/js/csrf.js" %}"></script>
|
||||
<script src="{% static "rest_framework/js/bootstrap.min.js" %}"></script>
|
||||
<script src="{% static "rest_framework/js/prettify-min.js" %}"></script>
|
||||
<script src="{% static "rest_framework/js/default.js" %}"></script>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('form').ajaxForm();
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
</body>
|
||||
{% endblock %}
|
||||
</html>
|
||||
38
backend/templates/rest_framework/docs/auth/basic.html
Normal file
38
backend/templates/rest_framework/docs/auth/basic.html
Normal file
@@ -0,0 +1,38 @@
|
||||
{% load rest_framework %}
|
||||
|
||||
<!-- Modal -->
|
||||
<div class="modal fade auth-modal auth-basic" id="auth_basic_modal" tabindex="-1" role="dialog" aria-labelledby="basic authentication modal">
|
||||
<div class="modal-dialog modal-md" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h3 class="modal-title"><i class="fa fa-key"></i> Basic Authentication</h3>
|
||||
</div>
|
||||
|
||||
<form class="form-horizontal authentication-basic-form">
|
||||
<div class="modal-body">
|
||||
<div class="form-group">
|
||||
<label for="authorization" class="col-sm-2 control-label">Username:</label>
|
||||
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" id="username" required>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="authorization" class="col-sm-2 control-label">Password:</label>
|
||||
|
||||
<div class="col-sm-10">
|
||||
<input type="password" class="form-control" id="password" required>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
||||
<button type="submit" class="btn btn-primary">Use Basic Authentication</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
35
backend/templates/rest_framework/docs/auth/session.html
Normal file
35
backend/templates/rest_framework/docs/auth/session.html
Normal file
@@ -0,0 +1,35 @@
|
||||
{% load rest_framework %}
|
||||
|
||||
<!-- Modal -->
|
||||
<div class="modal fade auth-modal auth-session" id="auth_session_modal" tabindex="-1" role="dialog" aria-labelledby="session authentication modal">
|
||||
<div class="modal-dialog modal-md" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h3 class="modal-title"><i class="fa fa-key"></i> Session Authentication</h3>
|
||||
</div>
|
||||
|
||||
<form class="form-horizontal authentication-session-form">
|
||||
<div class="modal-body">
|
||||
|
||||
{% if user.is_authenticated %}
|
||||
<h4 class="text-center">You are logged in as {{ user.get_username }}.</h4>
|
||||
{% else %}
|
||||
|
||||
<div class="text-center">
|
||||
<h4 class="text-center">You need to {% optional_docs_login request %} to enable Session Authentication.</h4>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
||||
{% if user.is_authenticated %}
|
||||
<button type="submit" class="btn btn-primary">Use Session Authentication</button>
|
||||
{% endif %}
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
36
backend/templates/rest_framework/docs/auth/token.html
Normal file
36
backend/templates/rest_framework/docs/auth/token.html
Normal file
@@ -0,0 +1,36 @@
|
||||
{% load rest_framework %}
|
||||
|
||||
<!-- Modal -->
|
||||
<div class="modal fade auth-modal auth-token" id="auth_token_modal" tabindex="-1" role="dialog" aria-labelledby="token authentication modal">
|
||||
<div class="modal-dialog modal-md" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h3 class="modal-title"><i class="fa fa-key"></i> Token Authentication</h3>
|
||||
</div>
|
||||
|
||||
<form class="form-horizontal authentication-token-form">
|
||||
<div class="modal-body">
|
||||
<div class="form-group">
|
||||
<label for="prefix" class="col-sm-2 control-label">Scheme:</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" id="scheme" placeholder="Bearer" aria-describedby="schemeHelpBlock" required>
|
||||
<span id="schemeHelpBlock" class="help-block">Either a registered authentication scheme such as <code>Bearer</code>, or a custom schema such as <code>Token</code> or <code>JWT</code>.</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="token" class="col-sm-2 control-label">Token:</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" id="token" placeholder="XXXX-XXXX-XXXX-XXXX" aria-describedby="helpBlock" required>
|
||||
<span id="tokenHelpBlock" class="help-block">A valid API token.</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
||||
<button type="submit" class="btn btn-primary">Use Token Authentication</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
31
backend/templates/rest_framework/docs/document.html
Normal file
31
backend/templates/rest_framework/docs/document.html
Normal file
@@ -0,0 +1,31 @@
|
||||
{% load rest_framework %}
|
||||
|
||||
<div class="row intro">
|
||||
<div class="col-md-6 intro-title">
|
||||
<h1>{{ document.title }}</h1>
|
||||
{% if document.description %}
|
||||
<p>{% render_markdown document.description %}</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="col-md-6 intro-code">
|
||||
{% for html in lang_intro_htmls %}
|
||||
{% include html %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% if document|data %}
|
||||
{% for section_key, section in document|data|items %}
|
||||
{% if section_key %}
|
||||
<h2 id="{{ section_key }}" class="coredocs-section-title">{{ section_key }} <a href="#{{ section_key }}"><i class="fa fa-link" aria-hidden="true"></i>
|
||||
</a></h2>
|
||||
{% endif %}
|
||||
|
||||
{% for link_key, link in section|schema_links|items %}
|
||||
{% include "rest_framework/docs/link.html" %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
|
||||
{% for link_key, link in document.links|items %}
|
||||
{% include "rest_framework/docs/link.html" %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
71
backend/templates/rest_framework/docs/error.html
Normal file
71
backend/templates/rest_framework/docs/error.html
Normal file
@@ -0,0 +1,71 @@
|
||||
{% load static %}
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
|
||||
<title>Error Rendering Schema</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
|
||||
|
||||
<h1>Error</h1>
|
||||
|
||||
<pre>
|
||||
{{ data }}
|
||||
</pre>
|
||||
|
||||
|
||||
{% if debug is True %}
|
||||
<hr />
|
||||
<h2>Additional Information</h2>
|
||||
<p>Note: You are seeing this message because <code>DEBUG==True</code>.</p>
|
||||
|
||||
<p>Seeing this page is <em>usually</em> a configuration error: are your
|
||||
<code>DEFAULT_AUTHENTICATION_CLASSES</code> or <code>DEFAULT_PERMISSION_CLASSES</code>
|
||||
being applied unexpectedly?</p>
|
||||
|
||||
<p>Your response status code is: <code>{{ response.status_code }}</code></p>
|
||||
|
||||
<h3>401 Unauthorised.</h3>
|
||||
<ul>
|
||||
<li>Do you have SessionAuthentication enabled?</li>
|
||||
<li>Are you logged in?</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h3>403 Forbidden.</h3>
|
||||
<ul>
|
||||
<li>Do you have sufficient permissions to access this view?</li>
|
||||
<li>Is you schema non-empty? (An empty schema will lead to a permission denied error being raised.)</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<p>Most commonly the intended solution is to disable authentication and permissions
|
||||
when including the docs urls:</p>
|
||||
|
||||
<pre>
|
||||
path('docs/', include_docs_urls(title='Your API',
|
||||
authentication_classes=[],
|
||||
permission_classes=[])),
|
||||
</pre>
|
||||
|
||||
|
||||
<h2>Overriding this template</h2>
|
||||
|
||||
<p>If you wish access to your docs to be authenticated you may override this template
|
||||
at <code>rest_framework/docs/error.html</code>.</p>
|
||||
|
||||
<p>The available context is: <code>data</code> the error dict above, <code>request</code>,
|
||||
<code>response</code> and the <code>debug</code> flag.</p>
|
||||
|
||||
{% endif %}
|
||||
|
||||
|
||||
|
||||
<script src="{% static 'rest_framework/js/jquery-3.5.1.min.js' %}"></script>
|
||||
</body>
|
||||
</html>
|
||||
57
backend/templates/rest_framework/docs/index.html
Normal file
57
backend/templates/rest_framework/docs/index.html
Normal file
@@ -0,0 +1,57 @@
|
||||
{% load static %}
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
|
||||
<title>{{ document.title }}</title>
|
||||
|
||||
<link href="{% static 'rest_framework/css/bootstrap.min.css' %}" rel="stylesheet">
|
||||
<link href="{% static 'rest_framework/css/bootstrap-theme.min.css' %}" rel="stylesheet">
|
||||
<link href="{% static 'rest_framework/css/font-awesome-4.0.3.css' %}" rel="stylesheet">
|
||||
<link href="{% static 'rest_framework/docs/css/base.css' %}" rel="stylesheet">
|
||||
<link href="{% static 'rest_framework/docs/css/jquery.json-view.min.css' %}" rel="stylesheet">
|
||||
|
||||
<link href="{% static 'rest_framework/docs/img/favicon.ico' %}" rel="shortcut icon">
|
||||
|
||||
{% if code_style %}<style>{{ code_style }}</style>{% endif %}
|
||||
<script src="{% static 'rest_framework/js/coreapi-0.1.1.js' %}"></script>
|
||||
<script src="{% url 'api-docs:schema-js' %}"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body data-spy="scroll" data-target="#sidebar-nav" data-offset="50">
|
||||
|
||||
{% include "rest_framework/docs/sidebar.html" %}
|
||||
|
||||
<div class="container" id="main">
|
||||
<div class="row">
|
||||
<div class="col-md-12 main-container">
|
||||
{% include "rest_framework/docs/document.html" %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% include "rest_framework/docs/auth/token.html" %}
|
||||
{% include "rest_framework/docs/auth/basic.html" %}
|
||||
{% include "rest_framework/docs/auth/session.html" %}
|
||||
|
||||
<script src="{% static 'rest_framework/js/jquery-3.5.1.min.js' %}"></script>
|
||||
<script src="{% static 'rest_framework/js/bootstrap.min.js' %}"></script>
|
||||
<script src="{% static 'rest_framework/docs/js/jquery.json-view.min.js' %}"></script>
|
||||
<script src="{% static 'rest_framework/docs/js/api.js' %}"></script>
|
||||
<script>
|
||||
{% if user.is_authenticated %}
|
||||
window.auth = {
|
||||
'type': 'session',
|
||||
};
|
||||
$('#selected-authentication').text('session');
|
||||
$('#auth-control').children().removeClass('active');
|
||||
$('#auth-control').find("[data-auth='session']").closest('li').addClass('active');
|
||||
{% endif %}
|
||||
$('pre.highlight').filter('[data-language="{{ langs | first }}"]').removeClass('hide');
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
51
backend/templates/rest_framework/docs/interact.html
Normal file
51
backend/templates/rest_framework/docs/interact.html
Normal file
@@ -0,0 +1,51 @@
|
||||
{% load rest_framework %}
|
||||
|
||||
<!-- Modal -->
|
||||
<div class="modal fade api-modal" id="{{ section_key }}_{{ link_key|slugify }}_modal" tabindex="-1" role="dialog" aria-labelledby="api explorer modal">
|
||||
<div class="modal-dialog modal-lg" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<div class="toggle-view hide">
|
||||
<div class="btn-group" role="group">
|
||||
<button type="button" data-display-toggle="data" class="btn btn-sm btn-info">Data</button>
|
||||
<button type="button" data-display-toggle="raw" class="btn btn-sm">Raw</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h3 class="modal-title"><i class="fa fa-exchange"></i> {{ link.title|default:link_key }}</h3>
|
||||
|
||||
</div>
|
||||
|
||||
<form data-key='["{{ section_key }}", "{{ link_key }}"]' class="api-interaction">
|
||||
<div class="modal-body">
|
||||
<div class="row">
|
||||
<div class="col-lg-6 request">
|
||||
{% form_for_link link %}
|
||||
</div>
|
||||
|
||||
<hr class="hidden-lg hidden-xl" />
|
||||
|
||||
<div class="col-lg-6 response" id="response">
|
||||
<div class="request-awaiting">Awaiting request</div>
|
||||
|
||||
<div class="meta hide">
|
||||
<span class="label label-primary request-method"></span>
|
||||
<code class="request-url"></code>
|
||||
<label class="label label-lg response-status-code pull-right"></label>
|
||||
</div>
|
||||
|
||||
<pre class="well response-data hide"></pre>
|
||||
<pre class="well response-raw hide"><div class="response-raw-request"></div><div class="response-raw-response"></div></pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
||||
<button type="submit" class="btn btn-primary">Send Request</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,5 @@
|
||||
{% load rest_framework %}
|
||||
{% load static %}
|
||||
<pre class="highlight javascript hide" data-language="javascript"><code>{% code html %}<!-- Load the JavaScript client library -->
|
||||
<script src="{% static 'rest_framework/js/coreapi-0.1.1.js' %}"></script>
|
||||
<script src="{% url 'api-docs:schema-js' %}"></script>{% endcode %}</code></pre>
|
||||
15
backend/templates/rest_framework/docs/langs/javascript.html
Normal file
15
backend/templates/rest_framework/docs/langs/javascript.html
Normal file
@@ -0,0 +1,15 @@
|
||||
{% load rest_framework %}
|
||||
<pre class="highlight javascript hide" data-language="javascript"><code>{% code javascript %}var coreapi = window.coreapi // Loaded by `coreapi.js`
|
||||
var schema = window.schema // Loaded by `schema.js`
|
||||
|
||||
// Initialize a client
|
||||
var client = new coreapi.Client()
|
||||
|
||||
// Interact with the API endpoint
|
||||
var action = [{% if section_key %}"{{ section_key }}", {% endif %}"{{ link_key }}"]
|
||||
{% if link.fields %}var params = {
|
||||
{% for field in link.fields %} {{ field.name }}: ...{% if not loop.last %},{% endif %}
|
||||
{% endfor %}}
|
||||
{% endif %}client.action(schema, action{% if link.fields %}, params{% endif %}).then(function(result) {
|
||||
// Return value is in 'result'
|
||||
}){% endcode %}</code></pre>
|
||||
@@ -0,0 +1,3 @@
|
||||
{% load rest_framework %}
|
||||
<pre class="highlight python hide" data-language="python"><code>{% code bash %}# Install the Python client library
|
||||
$ pip install coreapi{% endcode %}</code></pre>
|
||||
13
backend/templates/rest_framework/docs/langs/python.html
Normal file
13
backend/templates/rest_framework/docs/langs/python.html
Normal file
@@ -0,0 +1,13 @@
|
||||
{% load rest_framework %}
|
||||
<pre class="highlight python hide" data-language="python"><code>{% code python %}import coreapi
|
||||
|
||||
# Initialize a client & load the schema document
|
||||
client = coreapi.Client()
|
||||
schema = client.get("{{ document.url }}"{% if schema_format %}, format="{{ schema_format }}"{% endif %})
|
||||
|
||||
# Interact with the API endpoint
|
||||
action = [{% if section_key %}"{{ section_key }}", {% endif %}"{{ link_key }}"]
|
||||
{% if link.fields %}params = {
|
||||
{% for field in link.fields %} "{{ field.name }}": ...{% if not loop.last %},{% endif %}
|
||||
{% endfor %}}
|
||||
{% endif %}result = client.action(schema, action{% if link.fields %}, params=params{% endif %}){% endcode %}</code></pre>
|
||||
@@ -0,0 +1,3 @@
|
||||
{% load rest_framework %}
|
||||
<pre class="highlight shell hide" data-language="shell"><code>{% code bash %}# Install the command line client
|
||||
$ pip install coreapi-cli{% endcode %}</code></pre>
|
||||
6
backend/templates/rest_framework/docs/langs/shell.html
Normal file
6
backend/templates/rest_framework/docs/langs/shell.html
Normal file
@@ -0,0 +1,6 @@
|
||||
{% load rest_framework %}
|
||||
<pre class="highlight shell hide" data-language="shell"><code>{% code bash %}# Load the schema document
|
||||
$ coreapi get {{ document.url }}{% if schema_format %} --format {{ schema_format }}{% endif %}
|
||||
|
||||
# Interact with the API endpoint
|
||||
$ coreapi action {% if section_key %}{{ section_key }} {% endif %}{{ link_key|cut:"> " }}{% for field in link.fields %} -p {{ field.name }}=...{% endfor %}{% endcode %}</code></pre>
|
||||
102
backend/templates/rest_framework/docs/link.html
Normal file
102
backend/templates/rest_framework/docs/link.html
Normal file
@@ -0,0 +1,102 @@
|
||||
{% load rest_framework %}
|
||||
<div class="row coredocs-link">
|
||||
|
||||
<div class="col-md-6 docs-content">
|
||||
<button
|
||||
class="btn btn-sm btn-success"
|
||||
style="float: right; margin-top: 20px"
|
||||
data-toggle="modal"
|
||||
data-target="#{{ section_key }}_{{ link_key|slugify }}_modal">
|
||||
<i class="fa fa-exchange"></i> Interact
|
||||
</button>
|
||||
|
||||
<h3 id="{{ section_key }}-{{ link_key|slugify }}" class="coredocs-link-title">{{ link.title|default:link_key }} <a href="#{{ section_key }}-{{ link_key|slugify }}"><i class="fa fa-link" aria-hidden="true"></i>
|
||||
</a></h3>
|
||||
|
||||
<div class="meta">
|
||||
<span class="label label-primary">{{ link.action|upper }}</span>
|
||||
<code>{{ link.url }}</code>
|
||||
</div>
|
||||
|
||||
<p>{% render_markdown link.description %}</p>
|
||||
|
||||
{% if link.fields|with_location:'path' %}
|
||||
<h4>Path Parameters</h4>
|
||||
<p>The following parameters should be included in the URL path.</p>
|
||||
<table class="parameters table table-bordered table-striped">
|
||||
<thead>
|
||||
<tr><th>Parameter</th><th>Description</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for field in link.fields|with_location:'path' %}
|
||||
<tr><td class="parameter-name"><code>{{ field.name }}</code>{% if field.required %} <span class="label label-warning">required</span>{% endif %}</td><td>{% if field.schema.description %}{{ field.schema.description|safe }}{% endif %}</td></tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% endif %}
|
||||
{% if link.fields|with_location:'query' %}
|
||||
<h4>Query Parameters</h4>
|
||||
<p>The following parameters should be included as part of a URL query string.</p>
|
||||
<table class="parameters table table-bordered table-striped">
|
||||
<thead>
|
||||
<tr><th>Parameter</th><th>Description</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for field in link.fields|with_location:'query' %}
|
||||
<tr><td class="parameter-name"><code>{{ field.name }}</code>{% if field.required %} <span class="label label-warning">required</span>{% endif %}</td><td>{% if field.schema.description %}{{ field.schema.description|safe }}{% endif %}</td></tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% endif %}
|
||||
{% if link.fields|with_location:'header' %}
|
||||
<h4>Header Parameters</h4>
|
||||
<p>The following parameters should be included as HTTP headers.</p>
|
||||
<table class="parameters table table-bordered table-striped">
|
||||
<thead>
|
||||
<tr><th>Parameter</th><th>Description</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for field in link.fields|with_location:'header' %}
|
||||
<tr><td class="parameter-name"><code>{{ field.name }}</code>{% if field.required %} <span class="label label-warning">required</span>{% endif %}</td><td>{% if field.schema.description %}{{ field.schema.description|safe }}{% endif %}</td></tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% endif %}
|
||||
{% if link.fields|with_location:'body' %}
|
||||
<h4>Request Body</h4>
|
||||
<p>The request body should be <code>"{{ link.encoding }}"</code> encoded, and should contain a single item.</p>
|
||||
<table class="parameters table table-bordered table-striped">
|
||||
<thead>
|
||||
<tr><th>Parameter</th><th>Description</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for field in link.fields|with_location:'body' %}
|
||||
<tr><td class="parameter-name"><code>{{ field.name }}</code>{% if field.required %} <span class="label label-warning">required</span>{% endif %}</td><td>{% if field.schema.description %}{{ field.schema.description|safe }}{% endif %}</td></tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% elif link.fields|with_location:'form' %}
|
||||
<h4>Request Body</h4>
|
||||
<p>The request body should be a <code>"{{ link.encoding }}"</code> encoded object, containing the following items.</p>
|
||||
<table class="parameters table table-bordered table-striped">
|
||||
<thead>
|
||||
<tr><th>Parameter</th><th>Description</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for field in link.fields|with_location:'form' %}
|
||||
<tr><td class="parameter-name"><code>{{ field.name }}</code>{% if field.required %} <span class="label label-warning">required</span>{% endif %}</td><td>{% if field.schema.description %}{{ field.schema.description|safe }}{% endif %}</td></tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 code-samples">
|
||||
{% for html in lang_htmls %}
|
||||
{% include html %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% include "rest_framework/docs/interact.html" with link=link %}
|
||||
44
backend/templates/rest_framework/docs/sidebar.html
Normal file
44
backend/templates/rest_framework/docs/sidebar.html
Normal file
@@ -0,0 +1,44 @@
|
||||
{% load rest_framework %}
|
||||
<div class="sidebar">
|
||||
<h3 class="brand"><a href="#">{{ document.title }}</a></h3>
|
||||
|
||||
<i class="fa fa-bars fa-2x toggle-btn" data-toggle="collapse" data-target="#menu-content"></i>
|
||||
<div class="menu-list">
|
||||
<ul id="menu-content" class="menu-content collapse out">
|
||||
{% if document|data %}
|
||||
{% for section_key, section in document|data|items %}
|
||||
<li data-toggle="collapse" data-target="#{{ section_key }}-dropdown" class="collapsed">
|
||||
<a><i class="fa fa-dot-circle-o fa-lg"></i> {% if section_key %}{{ section_key }}{% else %}API Endpoints{% endif %} <span class="arrow"></span></a>
|
||||
<ul class="sub-menu {% if section_key %}collapse{% endif %}" id="{{ section_key }}-dropdown">
|
||||
{% for link_key, link in section|schema_links|items %}
|
||||
<li><a href="#{{ section_key }}-{{ link_key|slugify }}">{{ link.title|default:link_key }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</li>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</ul>
|
||||
|
||||
<ul class="menu-list menu-list-bottom">
|
||||
<li data-toggle="collapse" data-target="#auth-control" class="collapsed">
|
||||
<a><i class="fa fa-user fa-lg"></i> Authentication</a> <span id="selected-authentication">{% if user.is_authenticated %}session{% else %}none{% endif %}</span>
|
||||
</li>
|
||||
<ul class="sub-menu collapse out" id="auth-control">
|
||||
<li {% if not user.is_authenticated %}class="active"{% endif %}><a data-auth="none" href="#">none</a></li>
|
||||
<li><a data-auth="token" data-toggle="modal" data-target="#auth_token_modal" href="#">token</a></li>
|
||||
<li><a data-auth="basic" data-toggle="modal" data-target="#auth_basic_modal" href="#">basic</a></li>
|
||||
<li {% if user.is_authenticated %}class="active"{% endif %}><a data-auth="session" data-toggle="modal" data-target="#auth_session_modal" href="#">session</a></li>
|
||||
</ul>
|
||||
|
||||
<li data-toggle="collapse" data-target="#language-control" class="collapsed">
|
||||
<a><i class="fa fa-code fa-lg"></i> Source Code</a> <span id="selected-language">{{ langs | first }}</span>
|
||||
</li>
|
||||
<ul class="sub-menu collapse out" id="language-control">
|
||||
{% for lang in langs %}
|
||||
<li{% if loop.first %} class="active"{% endif %}><a href="#" data-language="{{ lang }}">{{ lang }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
16
backend/templates/rest_framework/filters/base.html
Normal file
16
backend/templates/rest_framework/filters/base.html
Normal file
@@ -0,0 +1,16 @@
|
||||
<div class="modal fade" id="filtersModal" tabindex="-1" role="dialog" aria-labelledby="filters" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
|
||||
<h4 class="modal-title">Filters</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
{% for element in elements %}
|
||||
{% if not forloop.first %}<hr/>{% endif %}
|
||||
{{ element }}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
14
backend/templates/rest_framework/filters/ordering.html
Normal file
14
backend/templates/rest_framework/filters/ordering.html
Normal file
@@ -0,0 +1,14 @@
|
||||
{% load rest_framework %}
|
||||
{% load i18n %}
|
||||
<h2>{% trans "Ordering" %}</h2>
|
||||
<div class="list-group">
|
||||
{% for key, label in options %}
|
||||
{% if key == current %}
|
||||
<a href="{% add_query_param request param key %}" class="list-group-item active">
|
||||
<span class="glyphicon glyphicon-ok" style="float: right" aria-hidden="true"></span> {{ label }}
|
||||
</a>
|
||||
{% else %}
|
||||
<a href="{% add_query_param request param key %}" class="list-group-item">{{ label }}</a>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
12
backend/templates/rest_framework/filters/search.html
Normal file
12
backend/templates/rest_framework/filters/search.html
Normal file
@@ -0,0 +1,12 @@
|
||||
{% load i18n %}
|
||||
<h2>{% trans "Search" %}</h2>
|
||||
<form class="form-inline">
|
||||
<div class="form-group">
|
||||
<div class="input-group">
|
||||
<input type="text" class="form-control" style="width: 350px" name="{{ param }}" value="{{ term }}">
|
||||
<span class="input-group-btn">
|
||||
<button class="btn btn-default" type="submit"><span class="glyphicon glyphicon-search" aria-hidden="true"></span> {% trans "Search" %}</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
21
backend/templates/rest_framework/horizontal/checkbox.html
Normal file
21
backend/templates/rest_framework/horizontal/checkbox.html
Normal file
@@ -0,0 +1,21 @@
|
||||
<div class="form-group horizontal-checkbox {% if field.errors %}has-error{% endif %}">
|
||||
{% if field.label %}
|
||||
<label class="col-sm-2 control-label {% if style.hide_label %}sr-only{% endif %}">
|
||||
{{ field.label }}
|
||||
</label>
|
||||
{% endif %}
|
||||
|
||||
<div class="col-sm-10">
|
||||
<input type="checkbox" name="{{ field.name }}" value="true" {% if field.value %}checked{% endif %}>
|
||||
|
||||
{% if field.errors %}
|
||||
{% for error in field.errors %}
|
||||
<span class="help-block">{{ error }}</span>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if field.help_text %}
|
||||
<span class="help-block">{{ field.help_text|safe }}</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,39 @@
|
||||
{% load rest_framework %}
|
||||
|
||||
<div class="form-group">
|
||||
{% if field.label %}
|
||||
<label class="col-sm-2 control-label {% if style.hide_label %}sr-only{% endif %}">
|
||||
{{ field.label }}
|
||||
</label>
|
||||
{% endif %}
|
||||
|
||||
<div class="col-sm-10">
|
||||
{% if style.inline %}
|
||||
{% for key, text in field.choices|items %}
|
||||
<label class="checkbox-inline">
|
||||
<input type="checkbox" name="{{ field.name }}" value="{{ key }}" {% if key|as_string in field.value|as_list_of_strings %}checked{% endif %}>
|
||||
{{ text }}
|
||||
</label>
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
{% for key, text in field.choices|items %}
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input type="checkbox" name="{{ field.name }}" value="{{ key }}" {% if key|as_string in field.value|as_list_of_strings %}checked{% endif %}>
|
||||
{{ text }}
|
||||
</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if field.errors %}
|
||||
{% for error in field.errors %}
|
||||
<span class="help-block">{{ error }}</span>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if field.help_text %}
|
||||
<span class="help-block">{{ field.help_text|safe }}</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
11
backend/templates/rest_framework/horizontal/dict_field.html
Normal file
11
backend/templates/rest_framework/horizontal/dict_field.html
Normal file
@@ -0,0 +1,11 @@
|
||||
<div class="form-group">
|
||||
{% if field.label %}
|
||||
<label class="col-sm-2 control-label {% if style.hide_label %}sr-only{% endif %}">
|
||||
{{ field.label }}
|
||||
</label>
|
||||
{% endif %}
|
||||
|
||||
<div class="col-sm-10">
|
||||
<p class="form-control-static">Dictionaries are not currently supported in HTML input.</p>
|
||||
</div>
|
||||
</div>
|
||||
16
backend/templates/rest_framework/horizontal/fieldset.html
Normal file
16
backend/templates/rest_framework/horizontal/fieldset.html
Normal file
@@ -0,0 +1,16 @@
|
||||
{% load rest_framework %}
|
||||
<fieldset>
|
||||
{% if field.label %}
|
||||
<div class="form-group" style="border-bottom: 1px solid #e5e5e5">
|
||||
<legend class="control-label col-sm-2 {% if style.hide_label %}sr-only{% endif %}" style="border-bottom: 0">
|
||||
{{ field.label }}
|
||||
</legend>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% for nested_field in field %}
|
||||
{% if not nested_field.read_only %}
|
||||
{% render_field nested_field style=style %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</fieldset>
|
||||
6
backend/templates/rest_framework/horizontal/form.html
Normal file
6
backend/templates/rest_framework/horizontal/form.html
Normal file
@@ -0,0 +1,6 @@
|
||||
{% load rest_framework %}
|
||||
{% for field in form %}
|
||||
{% if not field.read_only %}
|
||||
{% render_field field style=style %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
21
backend/templates/rest_framework/horizontal/input.html
Normal file
21
backend/templates/rest_framework/horizontal/input.html
Normal file
@@ -0,0 +1,21 @@
|
||||
<div class="form-group {% if field.errors %}has-error{% endif %}">
|
||||
{% if field.label %}
|
||||
<label class="col-sm-2 control-label {% if style.hide_label %}sr-only{% endif %}">
|
||||
{{ field.label }}
|
||||
</label>
|
||||
{% endif %}
|
||||
|
||||
<div class="col-sm-10">
|
||||
<input name="{{ field.name }}" {% if style.input_type != "file" %}class="form-control"{% endif %} type="{{ style.input_type }}" {% if style.placeholder %}placeholder="{{ style.placeholder }}"{% endif %} {% if field.value is not None %}value="{{ field.value }}"{% endif %} {% if style.autofocus and style.input_type != "hidden" %}autofocus{% endif %}>
|
||||
|
||||
{% if field.errors %}
|
||||
{% for error in field.errors %}
|
||||
<span class="help-block">{{ error }}</span>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if field.help_text %}
|
||||
<span class="help-block">{{ field.help_text|safe }}</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
11
backend/templates/rest_framework/horizontal/list_field.html
Normal file
11
backend/templates/rest_framework/horizontal/list_field.html
Normal file
@@ -0,0 +1,11 @@
|
||||
<div class="form-group">
|
||||
{% if field.label %}
|
||||
<label class="col-sm-2 control-label {% if style.hide_label %}sr-only{% endif %}">
|
||||
{{ field.label }}
|
||||
</label>
|
||||
{% endif %}
|
||||
|
||||
<div class="col-sm-10">
|
||||
<p class="form-control-static">Lists are not currently supported in HTML input.</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,13 @@
|
||||
{% load rest_framework %}
|
||||
|
||||
<fieldset>
|
||||
{% if field.label %}
|
||||
<div class="form-group" style="border-bottom: 1px solid #e5e5e5">
|
||||
<legend class="control-label col-sm-2 {% if style.hide_label %}sr-only{% endif %}" style="border-bottom: 0">
|
||||
{{ field.label }}
|
||||
</legend>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<p>Lists are not currently supported in HTML input.</p>
|
||||
</fieldset>
|
||||
57
backend/templates/rest_framework/horizontal/radio.html
Normal file
57
backend/templates/rest_framework/horizontal/radio.html
Normal file
@@ -0,0 +1,57 @@
|
||||
{% load i18n %}
|
||||
{% load rest_framework %}
|
||||
|
||||
{% trans "None" as none_choice %}
|
||||
|
||||
<div class="form-group">
|
||||
{% if field.label %}
|
||||
<label class="col-sm-2 control-label {% if style.hide_label %}sr-only{% endif %}">
|
||||
{{ field.label }}
|
||||
</label>
|
||||
{% endif %}
|
||||
|
||||
<div class="col-sm-10">
|
||||
{% if style.inline %}
|
||||
{% if field.allow_null or field.allow_blank %}
|
||||
<label class="radio-inline">
|
||||
<input type="radio" name="{{ field.name }}" value="" {% if not field.value %}checked{% endif %} />
|
||||
{{ none_choice }}
|
||||
</label>
|
||||
{% endif %}
|
||||
|
||||
{% for key, text in field.choices|items %}
|
||||
<label class="radio-inline">
|
||||
<input type="radio" name="{{ field.name }}" value="{{ key }}" {% if key|as_string == field.value|as_string %}checked{% endif %} />
|
||||
{{ text }}
|
||||
</label>
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
{% if field.allow_null or field.allow_blank %}
|
||||
<div class="radio">
|
||||
<label>
|
||||
<input type="radio" name="{{ field.name }}" value="" {% if not field.value %}checked{% endif %} />
|
||||
{{ none_choice }}
|
||||
</label>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% for key, text in field.choices|items %}
|
||||
<div class="radio">
|
||||
<label>
|
||||
<input type="radio" name="{{ field.name }}" value="{{ key }}" {% if key|as_string == field.value|as_string %}checked{% endif %} />
|
||||
{{ text }}
|
||||
</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if field.errors %}
|
||||
{% for error in field.errors %}
|
||||
<span class="help-block">{{ error }}</span>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if field.help_text %}
|
||||
<span class="help-block">{{ field.help_text|safe }}</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
36
backend/templates/rest_framework/horizontal/select.html
Normal file
36
backend/templates/rest_framework/horizontal/select.html
Normal file
@@ -0,0 +1,36 @@
|
||||
{% load rest_framework %}
|
||||
|
||||
<div class="form-group">
|
||||
{% if field.label %}
|
||||
<label class="col-sm-2 control-label {% if style.hide_label %}sr-only{% endif %}">
|
||||
{{ field.label }}
|
||||
</label>
|
||||
{% endif %}
|
||||
|
||||
<div class="col-sm-10">
|
||||
<select class="form-control" name="{{ field.name }}">
|
||||
{% if field.allow_null or field.allow_blank %}
|
||||
<option value="" {% if not field.value %}selected{% endif %}>--------</option>
|
||||
{% endif %}
|
||||
{% for select in field.iter_options %}
|
||||
{% if select.start_option_group %}
|
||||
<optgroup label="{{ select.label }}">
|
||||
{% elif select.end_option_group %}
|
||||
</optgroup>
|
||||
{% else %}
|
||||
<option value="{{ select.value }}" {% if select.value|as_string == field.value|as_string %}selected{% endif %} {% if select.disabled %}disabled{% endif %}>{{ select.display_text }}</option>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</select>
|
||||
|
||||
{% if field.errors %}
|
||||
{% for error in field.errors %}
|
||||
<span class="help-block">{{ error }}</span>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if field.help_text %}
|
||||
<span class="help-block">{{ field.help_text|safe }}</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,38 @@
|
||||
{% load i18n %}
|
||||
{% load rest_framework %}
|
||||
|
||||
{% trans "No items to select." as no_items %}
|
||||
|
||||
<div class="form-group">
|
||||
{% if field.label %}
|
||||
<label class="col-sm-2 control-label {% if style.hide_label %}sr-only{% endif %}">
|
||||
{{ field.label }}
|
||||
</label>
|
||||
{% endif %}
|
||||
|
||||
<div class="col-sm-10">
|
||||
<select multiple {{ field.choices|yesno:",disabled" }} class="form-control" name="{{ field.name }}">
|
||||
{% for select in field.iter_options %}
|
||||
{% if select.start_option_group %}
|
||||
<optgroup label="{{ select.label }}">
|
||||
{% elif select.end_option_group %}
|
||||
</optgroup>
|
||||
{% else %}
|
||||
<option value="{{ select.value }}" {% if select.value|as_string in field.value|as_list_of_strings %}selected{% endif %} {% if select.disabled %}disabled{% endif %}>{{ select.display_text }}</option>
|
||||
{% endif %}
|
||||
{% empty %}
|
||||
<option>{{ no_items }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
|
||||
{% if field.errors %}
|
||||
{% for error in field.errors %}
|
||||
<span class="help-block">{{ error }}</span>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if field.help_text %}
|
||||
<span class="help-block">{{ field.help_text|safe }}</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
21
backend/templates/rest_framework/horizontal/textarea.html
Normal file
21
backend/templates/rest_framework/horizontal/textarea.html
Normal file
@@ -0,0 +1,21 @@
|
||||
<div class="form-group {% if field.errors %}has-error{% endif %}">
|
||||
{% if field.label %}
|
||||
<label class="col-sm-2 control-label {% if style.hide_label %}sr-only{% endif %}">
|
||||
{{ field.label }}
|
||||
</label>
|
||||
{% endif %}
|
||||
|
||||
<div class="col-sm-10">
|
||||
<textarea name="{{ field.name }}" class="form-control" {% if style.placeholder %}placeholder="{{ style.placeholder }}"{% endif %} {% if style.rows %}rows="{{ style.rows }}"{% endif %}>{% if field.value %}{{ field.value }}{% endif %}</textarea>
|
||||
|
||||
{% if field.errors %}
|
||||
{% for error in field.errors %}
|
||||
<span class="help-block">{{ error }}</span>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if field.help_text %}
|
||||
<span class="help-block">{{ field.help_text|safe }}</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
8
backend/templates/rest_framework/inline/checkbox.html
Normal file
8
backend/templates/rest_framework/inline/checkbox.html
Normal file
@@ -0,0 +1,8 @@
|
||||
<div class="form-group {% if field.errors %}has-error{% endif %}">
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input type="checkbox" name="{{ field.name }}" value="true" {% if field.value %}checked{% endif %}>
|
||||
{% if field.label %}{{ field.label }}{% endif %}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,16 @@
|
||||
{% load rest_framework %}
|
||||
|
||||
<div class="form-group {% if field.errors %}has-error{% endif %}">
|
||||
{% if field.label %}
|
||||
<label class="sr-only">{{ field.label }}</label>
|
||||
{% endif %}
|
||||
|
||||
{% for key, text in field.choices|items %}
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input type="checkbox" name="{{ field.name }}" value="{{ key }}" {% if key|as_string in field.value|as_list_of_strings %}checked{% endif %}>
|
||||
{{ text }}
|
||||
</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
9
backend/templates/rest_framework/inline/dict_field.html
Normal file
9
backend/templates/rest_framework/inline/dict_field.html
Normal file
@@ -0,0 +1,9 @@
|
||||
<div class="form-group">
|
||||
{% if field.label %}
|
||||
<label class="sr-only">
|
||||
{{ field.label }}
|
||||
</label>
|
||||
{% endif %}
|
||||
|
||||
<p class="form-control-static">Dictionaries are not currently supported in HTML input.</p>
|
||||
</div>
|
||||
6
backend/templates/rest_framework/inline/fieldset.html
Normal file
6
backend/templates/rest_framework/inline/fieldset.html
Normal file
@@ -0,0 +1,6 @@
|
||||
{% load rest_framework %}
|
||||
{% for nested_field in field %}
|
||||
{% if not nested_field.read_only %}
|
||||
{% render_field nested_field style=style %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
6
backend/templates/rest_framework/inline/form.html
Normal file
6
backend/templates/rest_framework/inline/form.html
Normal file
@@ -0,0 +1,6 @@
|
||||
{% load rest_framework %}
|
||||
{% for field in form %}
|
||||
{% if not field.read_only %}
|
||||
{% render_field field style=style %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
9
backend/templates/rest_framework/inline/input.html
Normal file
9
backend/templates/rest_framework/inline/input.html
Normal file
@@ -0,0 +1,9 @@
|
||||
<div class="form-group {% if field.errors %}has-error{% endif %}">
|
||||
{% if field.label %}
|
||||
<label class="sr-only">
|
||||
{{ field.label }}
|
||||
</label>
|
||||
{% endif %}
|
||||
|
||||
<input name="{{ field.name }}" {% if style.input_type != "file" %}class="form-control"{% endif %} type="{{ style.input_type }}" {% if style.placeholder %}placeholder="{{ style.placeholder }}"{% endif %} {% if field.value is not None %}value="{{ field.value }}"{% endif %} {% if style.autofocus and style.input_type != "hidden" %}autofocus{% endif %}>
|
||||
</div>
|
||||
9
backend/templates/rest_framework/inline/list_field.html
Normal file
9
backend/templates/rest_framework/inline/list_field.html
Normal file
@@ -0,0 +1,9 @@
|
||||
<div class="form-group">
|
||||
{% if field.label %}
|
||||
<label class="sr-only">
|
||||
{{ field.label }}
|
||||
</label>
|
||||
{% endif %}
|
||||
|
||||
<p class="form-control-static">Lists are not currently supported in HTML input.</p>
|
||||
</div>
|
||||
@@ -0,0 +1 @@
|
||||
<span>Lists are not currently supported in HTML input.</span>
|
||||
29
backend/templates/rest_framework/inline/radio.html
Normal file
29
backend/templates/rest_framework/inline/radio.html
Normal file
@@ -0,0 +1,29 @@
|
||||
{% load i18n %}
|
||||
{% load rest_framework %}
|
||||
{% trans "None" as none_choice %}
|
||||
|
||||
<div class="form-group {% if field.errors %}has-error{% endif %}">
|
||||
{% if field.label %}
|
||||
<label class="sr-only">
|
||||
{{ field.label }}
|
||||
</label>
|
||||
{% endif %}
|
||||
|
||||
{% if field.allow_null or field.allow_blank %}
|
||||
<div class="radio">
|
||||
<label>
|
||||
<input type="radio" name="{{ field.name }}" value="" {% if not field.value %}checked{% endif %}>
|
||||
{{ none_choice }}
|
||||
</label>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% for key, text in field.choices|items %}
|
||||
<div class="radio">
|
||||
<label>
|
||||
<input type="radio" name="{{ field.name }}" value="{{ key }}" {% if key|as_string == field.value|as_string %}checked{% endif %}>
|
||||
{{ text }}
|
||||
</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
24
backend/templates/rest_framework/inline/select.html
Normal file
24
backend/templates/rest_framework/inline/select.html
Normal file
@@ -0,0 +1,24 @@
|
||||
{% load rest_framework %}
|
||||
|
||||
<div class="form-group {% if field.errors %}has-error{% endif %}">
|
||||
{% if field.label %}
|
||||
<label class="sr-only">
|
||||
{{ field.label }}
|
||||
</label>
|
||||
{% endif %}
|
||||
|
||||
<select class="form-control" name="{{ field.name }}">
|
||||
{% if field.allow_null or field.allow_blank %}
|
||||
<option value="" {% if not field.value %}selected{% endif %}>--------</option>
|
||||
{% endif %}
|
||||
{% for select in field.iter_options %}
|
||||
{% if select.start_option_group %}
|
||||
<optgroup label="{{ select.label }}">
|
||||
{% elif select.end_option_group %}
|
||||
</optgroup>
|
||||
{% else %}
|
||||
<option value="{{ select.value }}" {% if select.value|as_string == field.value|as_string %}selected{% endif %} {% if select.disabled %}disabled{% endif %}>{{ select.display_text }}</option>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
25
backend/templates/rest_framework/inline/select_multiple.html
Normal file
25
backend/templates/rest_framework/inline/select_multiple.html
Normal file
@@ -0,0 +1,25 @@
|
||||
{% load i18n %}
|
||||
{% load rest_framework %}
|
||||
{% trans "No items to select." as no_items %}
|
||||
|
||||
<div class="form-group {% if field.errors %}has-error{% endif %}">
|
||||
{% if field.label %}
|
||||
<label class="sr-only">
|
||||
{{ field.label }}
|
||||
</label>
|
||||
{% endif %}
|
||||
|
||||
<select multiple {{ field.choices|yesno:",disabled" }} class="form-control" name="{{ field.name }}">
|
||||
{% for select in field.iter_options %}
|
||||
{% if select.start_option_group %}
|
||||
<optgroup label="{{ select.label }}">
|
||||
{% elif select.end_option_group %}
|
||||
</optgroup>
|
||||
{% else %}
|
||||
<option value="{{ select.value }}" {% if select.value|as_string in field.value|as_list_of_strings %}selected{% endif %} {% if select.disabled %}disabled{% endif %}>{{ select.display_text }}</option>
|
||||
{% endif %}
|
||||
{% empty %}
|
||||
<option>{{ no_items }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
9
backend/templates/rest_framework/inline/textarea.html
Normal file
9
backend/templates/rest_framework/inline/textarea.html
Normal file
@@ -0,0 +1,9 @@
|
||||
<div class="form-group {% if field.errors %}has-error{% endif %}">
|
||||
{% if field.label %}
|
||||
<label class="sr-only">
|
||||
{{ field.label }}
|
||||
</label>
|
||||
{% endif %}
|
||||
|
||||
<input name="{{ field.name }}" type="text" class="form-control" {% if style.placeholder %}placeholder="{{ style.placeholder }}"{% endif %} {% if field.value %}value="{{ field.value }}"{% endif %}>
|
||||
</div>
|
||||
3
backend/templates/rest_framework/login.html
Normal file
3
backend/templates/rest_framework/login.html
Normal file
@@ -0,0 +1,3 @@
|
||||
{% extends "rest_framework/login_base.html" %}
|
||||
|
||||
{# Override this template in your own templates directory to customize #}
|
||||
65
backend/templates/rest_framework/login_base.html
Normal file
65
backend/templates/rest_framework/login_base.html
Normal file
@@ -0,0 +1,65 @@
|
||||
{% extends "rest_framework/base.html" %}
|
||||
{% load rest_framework %}
|
||||
|
||||
{% block body %}
|
||||
<body class="container">
|
||||
<div class="container-fluid" style="margin-top: 30px">
|
||||
<div class="row-fluid">
|
||||
<div class="well" style="width: 320px; margin-left: auto; margin-right: auto">
|
||||
<div class="row-fluid">
|
||||
<div>
|
||||
{% block branding %}<h3 style="margin: 0 0 20px;">Django REST framework</h3>{% endblock %}
|
||||
</div>
|
||||
</div><!-- /row fluid -->
|
||||
|
||||
<div class="row-fluid">
|
||||
<div>
|
||||
<form action="{% url 'rest_framework:login' %}" role="form" method="post">
|
||||
{% csrf_token %}
|
||||
<input type="hidden" name="next" value="{{ next }}" />
|
||||
|
||||
<div id="div_id_username" class="clearfix control-group {% if form.username.errors %}error{% endif %}">
|
||||
<div class="form-group">
|
||||
<label for="id_username">{{ form.username.label }}:</label>
|
||||
<input type="text" name="username" maxlength="100"
|
||||
autocapitalize="off"
|
||||
autocorrect="off" class="form-control textinput textInput"
|
||||
id="id_username" required autofocus
|
||||
{% if form.username.value %}value="{{ form.username.value }}"{% endif %}>
|
||||
{% if form.username.errors %}
|
||||
<p class="text-error">
|
||||
{{ form.username.errors|striptags }}
|
||||
</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="div_id_password" class="clearfix control-group {% if form.password.errors %}error{% endif %}">
|
||||
<div class="form-group">
|
||||
<label for="id_password">{{ form.password.label }}:</label>
|
||||
<input type="password" name="password" maxlength="100" autocapitalize="off" autocorrect="off" class="form-control textinput textInput" id="id_password" required>
|
||||
{% if form.password.errors %}
|
||||
<p class="text-error">
|
||||
{{ form.password.errors|striptags }}
|
||||
</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if form.non_field_errors %}
|
||||
{% for error in form.non_field_errors %}
|
||||
<div class="well well-small text-error" style="border: none">{{ error }}</div>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
<div class="form-actions-no-box">
|
||||
<input type="submit" name="submit" value="Log in" class="btn btn-primary form-control" id="submit-id-submit">
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div><!-- /.row-fluid -->
|
||||
</div><!--/.well-->
|
||||
</div><!-- /.row-fluid -->
|
||||
</div><!-- /.container-fluid -->
|
||||
</body>
|
||||
{% endblock %}
|
||||
47
backend/templates/rest_framework/pagination/numbers.html
Normal file
47
backend/templates/rest_framework/pagination/numbers.html
Normal file
@@ -0,0 +1,47 @@
|
||||
<ul class="pagination" style="margin: 5px 0 10px 0">
|
||||
{% if previous_url %}
|
||||
<li>
|
||||
<a href="{{ previous_url }}" aria-label="Previous">
|
||||
<span aria-hidden="true">«</span>
|
||||
</a>
|
||||
</li>
|
||||
{% else %}
|
||||
<li class="disabled">
|
||||
<a href="#" aria-label="Previous">
|
||||
<span aria-hidden="true">«</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% for page_link in page_links %}
|
||||
{% if page_link.is_break %}
|
||||
<li class="disabled">
|
||||
<a href="#"><span aria-hidden="true">…</span></a>
|
||||
</li>
|
||||
{% else %}
|
||||
{% if page_link.is_active %}
|
||||
<li class="active">
|
||||
<a href="{{ page_link.url }}">{{ page_link.number }}</a>
|
||||
</li>
|
||||
{% else %}
|
||||
<li>
|
||||
<a href="{{ page_link.url }}">{{ page_link.number }}</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
{% if next_url %}
|
||||
<li>
|
||||
<a href="{{ next_url }}" aria-label="Next">
|
||||
<span aria-hidden="true">»</span>
|
||||
</a>
|
||||
</li>
|
||||
{% else %}
|
||||
<li class="disabled">
|
||||
<a href="#" aria-label="Next">
|
||||
<span aria-hidden="true">»</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
@@ -0,0 +1,21 @@
|
||||
<ul class="pager">
|
||||
{% if previous_url %}
|
||||
<li class="previous">
|
||||
<a href="{{ previous_url }}">« Previous</a>
|
||||
</li>
|
||||
{% else %}
|
||||
<li class="previous disabled">
|
||||
<a href="#">« Previous</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if next_url %}
|
||||
<li class="next">
|
||||
<a href="{{ next_url }}">Next »</a>
|
||||
</li>
|
||||
{% else %}
|
||||
<li class="next disabled">
|
||||
<a href="#">Next »</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
11
backend/templates/rest_framework/raw_data_form.html
Normal file
11
backend/templates/rest_framework/raw_data_form.html
Normal file
@@ -0,0 +1,11 @@
|
||||
{% load rest_framework %}
|
||||
{{ form.non_field_errors }}
|
||||
{% for field in form %}
|
||||
<div class="form-group">
|
||||
{{ field.label_tag|add_class:"col-sm-2 control-label" }}
|
||||
<div class="col-sm-10">
|
||||
{{ field|add_class:"form-control" }}
|
||||
<span class="help-block">{{ field.help_text|safe }}</span>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
3
backend/templates/rest_framework/schema.js
Normal file
3
backend/templates/rest_framework/schema.js
Normal file
@@ -0,0 +1,3 @@
|
||||
var codec = new window.coreapi.codecs.CoreJSONCodec()
|
||||
var coreJSON = window.atob('{{ schema }}')
|
||||
window.schema = codec.decode(coreJSON)
|
||||
18
backend/templates/rest_framework/vertical/checkbox.html
Normal file
18
backend/templates/rest_framework/vertical/checkbox.html
Normal file
@@ -0,0 +1,18 @@
|
||||
<div class="form-group {% if field.errors %}has-error{% endif %}">
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input type="checkbox" name="{{ field.name }}" value="true" {% if field.value %}checked{% endif %}>
|
||||
{% if field.label %}{{ field.label }}{% endif %}
|
||||
</label>
|
||||
</div>
|
||||
|
||||
{% if field.errors %}
|
||||
{% for error in field.errors %}
|
||||
<span class="help-block">{{ error }}</span>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if field.help_text %}
|
||||
<span class="help-block">{{ field.help_text|safe }}</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
@@ -0,0 +1,37 @@
|
||||
{% load rest_framework %}
|
||||
|
||||
<div class="form-group {% if field.errors %}has-error{% endif %}">
|
||||
{% if field.label %}
|
||||
<label {% if style.hide_label %}class="sr-only"{% endif %}>{{ field.label }}</label>
|
||||
{% endif %}
|
||||
|
||||
{% if style.inline %}
|
||||
<div>
|
||||
{% for key, text in field.choices|items %}
|
||||
<label class="checkbox-inline">
|
||||
<input type="checkbox" name="{{ field.name }}" value="{{ key }}" {% if key|as_string in field.value|as_list_of_strings %}checked{% endif %}>
|
||||
{{ text }}
|
||||
</label>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% else %}
|
||||
{% for key, text in field.choices|items %}
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input type="checkbox" name="{{ field.name }}" value="{{ key }}" {% if key|as_string in field.value|as_list_of_strings %}checked{% endif %}>
|
||||
{{ text }}
|
||||
</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if field.errors %}
|
||||
{% for error in field.errors %}
|
||||
<span class="help-block">{{ error }}</span>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if field.help_text %}
|
||||
<span class="help-block">{{ field.help_text|safe }}</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
@@ -0,0 +1,7 @@
|
||||
<div class="form-group">
|
||||
{% if field.label %}
|
||||
<label {% if style.hide_label %}class="sr-only"{% endif %}>{{ field.label }}</label>
|
||||
{% endif %}
|
||||
|
||||
<p class="form-control-static">Dictionaries are not currently supported in HTML input.</p>
|
||||
</div>
|
||||
15
backend/templates/rest_framework/vertical/fieldset.html
Normal file
15
backend/templates/rest_framework/vertical/fieldset.html
Normal file
@@ -0,0 +1,15 @@
|
||||
{% load rest_framework %}
|
||||
|
||||
<fieldset>
|
||||
{% if field.label %}
|
||||
<legend {% if style.hide_label %}class="sr-only"{% endif %}>
|
||||
{{ field.label }}
|
||||
</legend>
|
||||
{% endif %}
|
||||
|
||||
{% for nested_field in field %}
|
||||
{% if not nested_field.read_only %}
|
||||
{% render_field nested_field style=style %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</fieldset>
|
||||
6
backend/templates/rest_framework/vertical/form.html
Normal file
6
backend/templates/rest_framework/vertical/form.html
Normal file
@@ -0,0 +1,6 @@
|
||||
{% load rest_framework %}
|
||||
{% for field in form %}
|
||||
{% if not field.read_only %}
|
||||
{% render_field field style=style %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
17
backend/templates/rest_framework/vertical/input.html
Normal file
17
backend/templates/rest_framework/vertical/input.html
Normal file
@@ -0,0 +1,17 @@
|
||||
<div class="form-group {% if field.errors %}has-error{% endif %}">
|
||||
{% if field.label %}
|
||||
<label {% if style.hide_label %}class="sr-only"{% endif %}>{{ field.label }}</label>
|
||||
{% endif %}
|
||||
|
||||
<input name="{{ field.name }}" {% if style.input_type != "file" %}class="form-control"{% endif %} type="{{ style.input_type }}" {% if style.placeholder %}placeholder="{{ style.placeholder }}"{% endif %} {% if field.value is not None %}value="{{ field.value }}"{% endif %} {% if style.autofocus and style.input_type != "hidden" %}autofocus{% endif %}>
|
||||
|
||||
{% if field.errors %}
|
||||
{% for error in field.errors %}
|
||||
<span class="help-block">{{ error }}</span>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if field.help_text %}
|
||||
<span class="help-block">{{ field.help_text|safe }}</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
@@ -0,0 +1,7 @@
|
||||
<div class="form-group">
|
||||
{% if field.label %}
|
||||
<label {% if style.hide_label %}class="sr-only"{% endif %}>{{ field.label }}</label>
|
||||
{% endif %}
|
||||
|
||||
<p class="form-control-static">Lists are not currently supported in HTML input.</p>
|
||||
</div>
|
||||
@@ -0,0 +1,9 @@
|
||||
<fieldset>
|
||||
{% if field.label %}
|
||||
<legend {% if style.hide_label %}class="sr-only"{% endif %}>
|
||||
{{ field.label }}
|
||||
</legend>
|
||||
{% endif %}
|
||||
|
||||
<p>Lists are not currently supported in HTML input.</p>
|
||||
</fieldset>
|
||||
57
backend/templates/rest_framework/vertical/radio.html
Normal file
57
backend/templates/rest_framework/vertical/radio.html
Normal file
@@ -0,0 +1,57 @@
|
||||
{% load i18n %}
|
||||
{% load rest_framework %}
|
||||
{% trans "None" as none_choice %}
|
||||
|
||||
<div class="form-group {% if field.errors %}has-error{% endif %}">
|
||||
{% if field.label %}
|
||||
<label {% if style.hide_label %}class="sr-only"{% endif %}>
|
||||
{{ field.label }}
|
||||
</label>
|
||||
{% endif %}
|
||||
|
||||
{% if style.inline %}
|
||||
<div>
|
||||
{% if field.allow_null or field.allow_blank %}
|
||||
<label class="radio-inline">
|
||||
<input type="radio" name="{{ field.name }}" value="" {% if not field.value %}checked{% endif %} />
|
||||
{{ none_choice }}
|
||||
</label>
|
||||
{% endif %}
|
||||
|
||||
{% for key, text in field.choices|items %}
|
||||
<label class="radio-inline">
|
||||
<input type="radio" name="{{ field.name }}" value="{{ key }}" {% if key|as_string == field.value|as_string %}checked{% endif %}>
|
||||
{{ text }}
|
||||
</label>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% else %}
|
||||
{% if field.allow_null or field.allow_blank %}
|
||||
<div class="radio">
|
||||
<label>
|
||||
<input type="radio" name="{{ field.name }}" value="" {% if not field.value %}checked{% endif %} />
|
||||
{{ none_choice }}
|
||||
</label>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% for key, text in field.choices|items %}
|
||||
<div class="radio">
|
||||
<label>
|
||||
<input type="radio" name="{{ field.name }}" value="{{ key }}" {% if key|as_string == field.value|as_string %}checked{% endif %}>
|
||||
{{ text }}
|
||||
</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if field.errors %}
|
||||
{% for error in field.errors %}
|
||||
<span class="help-block">{{ error }}</span>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if field.help_text %}
|
||||
<span class="help-block">{{ field.help_text|safe }}</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
34
backend/templates/rest_framework/vertical/select.html
Normal file
34
backend/templates/rest_framework/vertical/select.html
Normal file
@@ -0,0 +1,34 @@
|
||||
{% load rest_framework %}
|
||||
|
||||
<div class="form-group {% if field.errors %}has-error{% endif %}">
|
||||
{% if field.label %}
|
||||
<label {% if style.hide_label %}class="sr-only"{% endif %}>
|
||||
{{ field.label }}
|
||||
</label>
|
||||
{% endif %}
|
||||
|
||||
<select class="form-control" name="{{ field.name }}">
|
||||
{% if field.allow_null or field.allow_blank %}
|
||||
<option value="" {% if not field.value %}selected{% endif %}>--------</option>
|
||||
{% endif %}
|
||||
{% for select in field.iter_options %}
|
||||
{% if select.start_option_group %}
|
||||
<optgroup label="{{ select.label }}">
|
||||
{% elif select.end_option_group %}
|
||||
</optgroup>
|
||||
{% else %}
|
||||
<option value="{{ select.value }}" {% if select.value|as_string == field.value|as_string %}selected{% endif %} {% if select.disabled %}disabled{% endif %}>{{ select.display_text }}</option>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</select>
|
||||
|
||||
{% if field.errors %}
|
||||
{% for error in field.errors %}
|
||||
<span class="help-block">{{ error }}</span>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if field.help_text %}
|
||||
<span class="help-block">{{ field.help_text|safe }}</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
@@ -0,0 +1,33 @@
|
||||
{% load i18n %}
|
||||
{% load rest_framework %}
|
||||
{% trans "No items to select." as no_items %}
|
||||
|
||||
<div class="form-group {% if field.errors %}has-error{% endif %}">
|
||||
{% if field.label %}
|
||||
<label {% if style.hide_label %}class="sr-only"{% endif %}>
|
||||
{{ field.label }}
|
||||
</label>
|
||||
{% endif %}
|
||||
|
||||
<select multiple {{ field.choices|yesno:",disabled" }} class="form-control" name="{{ field.name }}">
|
||||
{% for select in field.iter_options %}
|
||||
{% if select.start_option_group %}
|
||||
<optgroup label="{{ select.label }}">
|
||||
{% elif select.end_option_group %}
|
||||
</optgroup>
|
||||
{% else %}
|
||||
<option value="{{ select.value }}" {% if select.value|as_string in field.value|as_list_of_strings %}selected{% endif %} {% if select.disabled %}disabled{% endif %}>{{ select.display_text }}</option>
|
||||
{% endif %}
|
||||
{% empty %}
|
||||
<option>{{ no_items }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
|
||||
{% if field.errors %}
|
||||
{% for error in field.errors %}<span class="help-block">{{ error }}</span>{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if field.help_text %}
|
||||
<span class="help-block">{{ field.help_text|safe }}</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
17
backend/templates/rest_framework/vertical/textarea.html
Normal file
17
backend/templates/rest_framework/vertical/textarea.html
Normal file
@@ -0,0 +1,17 @@
|
||||
<div class="form-group {% if field.errors %}has-error{% endif %}">
|
||||
{% if field.label %}
|
||||
<label {% if style.hide_label %}class="sr-only"{% endif %}>
|
||||
{{ field.label }}
|
||||
</label>
|
||||
{% endif %}
|
||||
|
||||
<textarea name="{{ field.name }}" class="form-control" {% if style.placeholder %}placeholder="{{ style.placeholder }}"{% endif %} {% if style.rows %}rows="{{ style.rows }}"{% endif %}>{% if field.value %}{{ field.value }}{% endif %}</textarea>
|
||||
|
||||
{% if field.errors %}
|
||||
{% for error in field.errors %}<span class="help-block">{{ error }}</span>{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if field.help_text %}
|
||||
<span class="help-block">{{ field.help_text|safe }}</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
Reference in New Issue
Block a user