with tutorial applications django sqlite plot django-forms linechart

applications - django tutorial



Django: muestra el diagrama de la base de datos SQLite, al que se accede desde el formulario (1)

Para las personas que en el futuro luchan contra el mismo problema, estaba usando páginas que no explicaban todos los pasos para hacer que nvd3 funcionara (o tal vez estaban desactualizadas).

Estos son los pasos a seguir para instalarlo y ponerlo en funcionamiento:

1) Instala django-nvd3 usando pip install django-nvd3

2) Como esto depende de python-nvd3, necesitamos instalar npm install -g bower usando npm install -g bower . (Si no tiene npm, simplemente instálelo con macports, o de cualquier otra forma que desee).

3) Luego, instale django-bower con el comando pip install django-bower

4) Luego ejecuta bower install nvd3 que también instalará la dependencia d3

5) Edite su view.py a algo como esto, este ejemplo es para lineChart:

charttype = "lineChart" chartcontainer = ''linechart_container'' # container name data = { ''charttype'': charttype, ''chartdata'': chartdata, ''chartcontainer'': chartcontainer, ''extra'': { ''x_is_date'': False, ''x_axis_format'': '''', ''tag_script_js'': True, ''jquery_on_ready'': True, ''chart_attr'': { ''xScale'':''(d3.scale.log())'', #for logscale on x-axis ''yScale'':''(d3.scale.log())'', #for logscale on y-axis ''xAxis.axisLabel'':''"Time, yrs"'', ''yAxis.axisLabel'':''"n(X)/n(H)"'', } } } return data

6) Actualice su settings.py con lo siguiente:

BOWER_COMPONENTS_ROOT = BASE_DIR BOWER_PATH = ''/usr/local/bin/bower'' BOWER_INSTALLED_APPS = ( ''d3'', ''nvd3'', )

y también agregue ''djangobower.finders.BowerFinder'', a su STATICFILES_FINDERS = (

7) Ahora su código html debe incluir estos (en la cabeza, por ejemplo):

<link media="all" href="{% static ''nvd3/src/nv.d3.css'' %}" type="text/css" rel="stylesheet" /> <script type="text/javascript" src=''{% static ''d3/d3.min.js'' %}''></script> <script type="text/javascript" src=''{% static ''nvd3/nv.d3.min.js'' %}''></script>

Y en algún lugar de tu cuerpo principal:

{% include_chart_jscss %} {% load_chart charttype chartdata chartcontainer extra %}

Finalmente, para donde quiera que aparezca la trama:

{% include_container chartcontainer %}

Esto funcionó para mí. Si alguien más enterado sobre esto encuentra algún error, por favor, ayúdame a corregirlo :)

Así que tengo una página escrita usando Django donde alguien puede ingresar información en un formulario, y al enviarla accede a una base de datos SQLite para recuperar la información consultada. Hasta ahora he llegado hasta aquí, pero no puedo crear y mostrar un diagrama debajo del formulario en la página.

He probado diferentes paquetes: ChartIt , Graphos y nvd3 . De cualquier manera, recibo un error, probablemente porque no entiendo todos los detalles de la codificación en Django.

Debajo está mi intento de crear una trama con nvd3. Cuando intento cargar la página, aparece el error:

Exception Value: Invalid block tag: ''load_chart'', expected ''elif'', ''else'' or ''endif''

en la línea de mi viewrun.html donde supongo que cargo en el nvd3:

{% load_chart charttype chartdata "linewithfocuschart_container" True "%d %b %Y %H" %}

Aquí están los archivos que uso. ¡Gracias por cualquier ayuda!

views.py

def createplot(molecules, chemrun_id, database=''laminar_idl.test.db''): conn, status_db = conn_to_db(database) if status_db and not molecules==None: time, x, y, abunds, status_fetch = get_one_species_all_times(conn, str(molecules)) chartdata = {''x'': time, ''name1'': molecules, ''y1'': abunds} charttype = "lineWithFocusChart" data = { ''charttype'': charttype, ''chartdata'': chartdata } return data return None @login_required def run(request, chemrun_id=1, molecule=None): if request.POST: form = MolChoiceForm(request.POST) if form.is_valid(): form.save() molecule = form.cleaned_data[''molecule''] return HttpResponseRedirect(''/chemrun/run/''+chemrun_id+''/''+molecule+''/'') else: form = MolChoiceForm() args = {} args.update(csrf(request)) args[''form''] = form args[''chemrun''] = ChemRun.objects.get(id=chemrun_id) if not molecule is None: args[''molecule''] = molecule plotdata = createplot(molecule, chemrun_id) args[''plotdata''] = plotdata return render_to_response(''interface/viewrun.html'', args, context_instance=RequestContext(request))

viewrun.html:

{% extends "interface/base.html" %} {% block content %} <article> {% if user.is_authenticated %} <header> <p><font size="+2">Chemical run: <i>{{run.title}}</i> (<b>ID #{{chemrun.id}}</b>)</font></p> {% load_chart charttype chartdata "linewithfocuschart_container" True "%d %b %Y %H" %} </header> <section> <p>Outputs written for {{chemrun.n_times}} time steps between {{chemrun.times_min}} and {{chemrun.times_max}} years</p> <p>Temperature: <b>{{chemrun.temperature}}</p> <p>Density: <b>{{chemrun.density}}</p> <hr> <form action=''/chemrun/run/{{chemrun.id}}/'' method=''post'' style="display: inline-block;">{% csrf_token %} {{form}} <input type="submit" name="submit" value="Plot"> </form> </section> {% else %} <h2>No data available because you are not logged in. {% endif %} {% endblock %}

base.html:

{% load staticfiles %} <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <title></title> <meta name="description" content=""> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="apple-touch-icon" href="apple-touch-icon.png"> <link rel="stylesheet" href="{% static ''css/normalize.min.css'' %}"> <link rel="stylesheet" href="{% static ''css/main.css'' %}"> <link media="all" href="{% static ''nvd3/src/nv.d3.css'' %}" type="text/css" rel="stylesheet" /> <script type="text/javascript" src=''{% static ''d3/d3.min.js'' %}''></script> <script type="text/javascript" src=''{% static ''nvd3/nv.d3.min.js'' %}''></script> <!--<script src="js/vendor/modernizr-2.8.3-respond-1.4.2.min.js"></script>--> <title>Chemicalizer</title> </head> <body> <div class="header-container"> <header class="wrapper clearfix"> <h1 class="title"><b><a href=''/''>Chemicalizer</a></b> &nbsp; &nbsp; </h1> <!--<h2 class="subtitle">- &nbsp; &nbsp; You need it!</h2>--> <nav> <ul> {% if user.is_authenticated %} {% if user.is_superuser %} <li><a href="/admin/">Admin</a></li> <li><a href="/chemrun/all/">All Models</a></li> {% else %} <li><a href="/chemrun/create/">Start model</a></li> <li><a href="/chemrun/all/">My Models</a></li> {% endif %} <li><a href="/accounts/logout/">Logout</a></li> {% else %} <li><a href="/accounts/login/">Login</a></li> <li><a href="/accounts/register/">Register</a></li> <li><a href="/contact/">Contact</a></li> {% endif %} </ul> </nav> </header> </div> <div class="main-container"> <div class="main wrapper clearfix"> {% block content %} {% endblock %} </div> <!-- #main --> </div> <!-- #main-container --> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> <script>window.jQuery || document.write(''<script src="js/vendor/jquery-1.11.2.min.js"><//script>'')</script> <!--<script src="js/main.js"></script>--> </body> </html>