Django的GitHub风格贡献图
项目描述
GitHub Contributions Django
为Django创建GitHub贡献图!
此存储库提供可用于生成GitHub贡献图的Django应用程序。在example
文件夹中提供了一个示例应用程序,您可以在此与之交互。
快速入门
安装contributions django
pip install contributions-django
将其添加到您的INSTALLED_APPS
INSTALLED_APPS = (
...
'contributions_django',
...
)
要在视图中生成图形,导入generate_contributors_graph
。给函数提供一个日期列表,并可选地提供一个标题来生成视图的上下文
# -*- coding: utf-8 -*-
from .models import Event
from django_contributions.graphs import generate_contributors_graph
from django.shortcuts import render
def events_view(request):
"""Generate a papers graph using all Events dates
"""
# Get a single list of timestamps for the view
dates = Event.objects.values_list('date', flat=True)
context = generate_contributors_graph(dates, title="Contributions")
return render(request, "events/index.html", context)
然后,在您的模板中,在您想要显示图形的地方包含此代码片段
{% include "contributions_django/graph.html" %}
请注意,默认情况下,模板包括bootstrap样式(CSS)和font awesome图标。如果您的模板中已包含这些,并希望删除它们,请参阅下一节,自定义。
自定义
如果您想要自定义图形中的任何颜色或文本,您可以在设置中的CONTRIBUTIONS_DJANGO
部分中这样做 - 默认值如下所示。
CONTRIBUTIONS_DJANGO = {
# Gradients (0 or weak to stronger)
'GRADIENT0': "#eee",
'GRADIENT1': "#d6e685",
'GRADIENT2': "#8cc665",
'GRADIENT3': "#44a340",
'GRADIENT4': "#1e6823",
# The name to appear in tooltips (e.g., 12 contributions)
'ITEM_NAME': 'contributions',
# Include bootstrap style for outer part of template
# set this to false if you already have it on your page
'INCLUDE_BOOTSTRAP': True,
'INCLUDE_FONTAWESOME': True,
# The icon to show next to title. Set to None to remove.
'ICON_CLASSES': "fa fa-calendar",
# Instead of boxes, use circles.
'CIRCLES': True
}
形状
如果将CIRCLES
设置为true,则单元格可以是圆形
颜色
对于渐变,您可以在类似这个的颜色生成网站找到颜色板并自定义1到4的渐变。您可能不想自定义GRADIENT0
,因为那是灰色(空)颜色。
绿色
默认(类似于GitHub)是一组绿色
蓝色
以下是蓝色的设置
# Gradients (0 or weak to stronger)
'GRADIENT0': "#eee", # this is empty gray, likely don't want to change this
'GRADIENT1': "#90E0EF",
'GRADIENT2': "#00B4D8",
'GRADIENT3': "#0077B6",
'GRADIENT4': "#03045E", # this should be the darkest
粉色
还有粉色呢!
# Gradients (0 or weak to stronger) - below is green
'GRADIENT0': "#eee", # this is empty gray, likely don't want to change this
'GRADIENT1': "#fbc3bc",
'GRADIENT2': "#f7a399",
'GRADIENT3': "#f38375",
'GRADIENT4': "#ef6351", # this should be the darkest
请提交一个拉取请求,添加您最喜欢的调色板的示例!
模板
如果您想自定义整个模板,可以创建默认模板的副本默认模板,并将其包含在您的视图中。
{% include "example/mygraph.html" %}
日期
重要的是,使用Django推荐不要使用无意识日期时间。实际上,如果您尝试将无意识日期时间保存到模型字段中,将会出现错误。这意味着contributions_django必须能够灵活地接受无意识或意识时间。以下是生成有意识时间戳的方法
from datetime import timedelta
from django.utils import timezone
import pytz
# get today and one year earlier
today = timezone.now()
last_year = today - timedelta(days=365)
# Create an event with a timezone aware timestamp
Event.objects.create(date=last_year, name="My Event")
以下是无意识时间戳
from datetime import datetime
timestamp = datetime.now()
无论您选择哪种方式,贡献图只关心日期,所以它使用无论是有意识还是无意识的timestamp.date()
。
示例应用
您可以使用位于tests下的示例(非常简单)应用进行交互式开发和测试。位于根目录下的manage.py,因此很容易更新您的安装并交互式地与测试接口进行交互。首先在根目录下创建一个虚拟环境,并安装依赖项,主要是以开发模式安装您的应用
python -m venv env
source env/bin/activate
cd example
pip install -r requirements.txt
然后进行迁移 - 这将创建一个基本的Event模型
$ python manage.py makemigrations main
Migrations for 'main':
example/apps/main/migrations/0001_initial.py
- Create model Event
并进行迁移
$ python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, main, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying main.0001_initial... OK
Applying sessions.0001_initial... OK
请注意,示例应用创建Event模型的目的仅仅是为了用日期填充一些内容。您可以使用contributions_django进行任何提供日期列表的可视化。在此阶段,如果您运行服务器并浏览到索引,您将看到空图表,因为我们还没有创建任何事件
python manage.py runserver
接下来,让我们运行管理命令来创建大量随机事件 - 1000个介于今天和去年之间的,具体来说。这是通过示例管理命令这里完成的
$ python manage.py create_events
Creating 1000 events:
Creating Event joyous-lemon-3372 at 2020-07-12 00:56:15.675397+00:00
Creating Event misunderstood-leg-5849 at 2019-09-23 23:23:01.675397+00:00
Creating Event rainbow-leg-6361 at 2020-07-16 19:03:03.675397+00:00
Creating Event cowy-eagle-2288 at 2020-02-19 21:55:53.675397+00:00
...
您应该能够运行应用程序并看到已填充的事件!
python manage.py runserver
开发
我建议您遵循相同的步骤设置示例应用
python -m venv env
pip install -r requirements.txt
source env/bin/activate
然后您可以在contributions_django下更改代码,并使用示例应用测试实时结果。
非常感谢
- cookiecutter-djangopackage
- 该库是从存档存储库contributions-graph中复活并更新以兼容Django的。原始许可证可以在这里查看。