我有一个简单的Django应用程序,该应用程序查询数据库并显示返回的对象的字段。我想知道将this有向图可视化集成到我的项目中的最佳方法是什么?到目前为止,我从未使用过d3。
请允许我解释一下我的申请。目前,它只是一种表格,允许用户通过输入书籍的唯一ID来查询有关书籍信息的数据库内容。这可以正常工作,通过使用模板显示内容。
我想做的是使用查询对象的字段之一将数据推送到上面的图形示例中,并在按下文本链接时在新窗口中简单显示此图形。
这是我的应用程序结构:
码
myapp.models.py:
from django.db import models
class Book(models.Model):
uid = models.IntegerField(primary_key=True)
title = models.CharField(max_length=30)
related_books = models.CharField(max_length=2048)
class Meta:
db_table = u'books'
related_books
字段包含我要绘制的数据。数据以rel_book1 rel_book2 rel_book3 ...
格式存储,其中每本书与所查询的Book对象相关,每个对象都有与n
相关的图书,但是至少总是有两本书。myproject.templates.search.html:
<form action="" method="get">
<label for="id_q">Search:</label>
<input id="id_q" name="q" type="text">
<input type="submit" value="Submit">
{% if found_entries %}
<ul>
{% for i in found_entries %}
{{ i.uid }} {{ i.title }} {{ value|linebreaks }}
{% endfor %}
</ul>
{% endif %}
</form>
所以这是我要显示图形的地方;当按下文本链接时,在新窗口中显示。
myapp.views.py:
from django.shortcuts import render_to_response
from django.template import RequestContext
from myapp.search import get_query
from myapp.models import Book
def search(request):
query_string = ''
found_entries = None
if ('q' in request.GET) and request.GET['q']:
query_string = request.GET['q']
found_entries = Book.objects.filter(uid=query_string)
return render_to_response('search.html',
{ 'query_string': query_string, 'found_entries': found_entries },
context_instance=RequestContext(request))
因此,重申一下,用户输入给定书的唯一ID,并显示与该书相关的数据库内容。在显示ID和标题的那一刻,我还要显示指向有向图示例的链接。
所以我的问题是,当查询Book模型时,我将如何从字段
related_books
中提取信息,以便可以将这些数据推入图示例中,从而为每个生成的Book对象生成图?感谢您的支持!
最佳答案
在我看来,您已经有足够的信息。您的视图返回与过滤器匹配的工作簿对象,并且related_books
是Book类的成员。
您只需要通过遍历每本书的related_books
属性来动态生成链接,例如
{% for book in found_entries %}
# print out whatever results here
<a href="graphing_page.html?contents=
{% for content in book.related_books %}content{% endfor %}
">Graph this</a>
{% endfor %}
我不确定d3库采用什么参数,但是连接的组件列表似乎很合理。
关于python - D3.js有向图Django集成,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14589748/