完善提交页面、提交列表和对应的后台逻辑
This commit is contained in:
@@ -13,18 +13,17 @@ DATABASES = {
|
|||||||
'ENGINE': 'django.db.backends.sqlite3',
|
'ENGINE': 'django.db.backends.sqlite3',
|
||||||
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
|
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
|
||||||
'CONN_MAX_AGE': 0.3,
|
'CONN_MAX_AGE': 0.3,
|
||||||
},
|
}
|
||||||
'mongodb': {
|
}
|
||||||
|
|
||||||
|
mongodb_setting = {
|
||||||
'HOST': '127.0.0.1',
|
'HOST': '127.0.0.1',
|
||||||
'USERNAME': 'root',
|
'USERNAME': 'root',
|
||||||
'PASSWORD': 'root',
|
'PASSWORD': 'root',
|
||||||
'PORT': 27017
|
'PORT': 27017
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
DEBUG = True
|
DEBUG = True
|
||||||
|
|
||||||
# 同理 这是 web 服务器的上传路径
|
# 同理 这是 web 服务器的上传路径
|
||||||
TEST_CASE_DIR = "/Users/virusdefender/Desktop/test_case/"
|
TEST_CASE_DIR = "/Users/virusdefender/Desktop/test_case/"
|
||||||
|
|
||||||
|
|||||||
@@ -50,9 +50,9 @@ urlpatterns = [
|
|||||||
url(r'^api/admin/problem/$', ProblemAdminAPIView.as_view(), name="problem_admin_api"),
|
url(r'^api/admin/problem/$', ProblemAdminAPIView.as_view(), name="problem_admin_api"),
|
||||||
url(r'^api/admin/test_case_upload/$', TestCaseUploadAPIView.as_view(), name="test_case_upload_api"),
|
url(r'^api/admin/test_case_upload/$', TestCaseUploadAPIView.as_view(), name="test_case_upload_api"),
|
||||||
url(r'^api/admin/tag/$', ProblemTagAdminAPIView.as_view(), name="problem_tag_admin_api"),
|
url(r'^api/admin/tag/$', ProblemTagAdminAPIView.as_view(), name="problem_tag_admin_api"),
|
||||||
url(r'^problem/(?P<problem_id>\d+)/my_solutions/$', "submission.views.problem_my_submissions_list_page",
|
url(r'^problem/(?P<problem_id>\d+)/my_submissions/$', "submission.views.problem_my_submissions_list_page",
|
||||||
name="problem_my_submissions_page"),
|
name="problem_my_submissions_page"),
|
||||||
url(r'^my_solution/(?P<solution_id>\w+)/$', "submission.views.my_submission", name="my_submission_page"),
|
url(r'^my_submission/(?P<submission_id>\w+)/$', "submission.views.my_submission", name="my_submission_page"),
|
||||||
|
|
||||||
url(r'^api/admin/join_group_request/$', JoinGroupRequestAdminAPIView.as_view(),
|
url(r'^api/admin/join_group_request/$', JoinGroupRequestAdminAPIView.as_view(),
|
||||||
name="join_group_request_admin_api"),
|
name="join_group_request_admin_api"),
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ require(["jquery", "code_mirror", "csrf", "bs_alert"], function ($, code_mirror,
|
|||||||
if (!data.result) {
|
if (!data.result) {
|
||||||
html += "CPU time: " + data.accepted_answer_info.time + "ms ";
|
html += "CPU time: " + data.accepted_answer_info.time + "ms ";
|
||||||
}
|
}
|
||||||
html += ('<a href="/submission/' + submission_id + '/" target="_blank">查看详情</a></div> </div>');
|
html += ('<a href="/my_submission/' + submission_id + '/" target="_blank">查看详情</a></div> </div>');
|
||||||
|
|
||||||
return html;
|
return html;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,17 @@
|
|||||||
define("bs_alert", ["jquery", "bootstrap"], function($){
|
define("bs_alert", ["jquery", "bootstrap"], function($){
|
||||||
function bs_alert(content){
|
function bs_alert(content){
|
||||||
|
if(!$("#alert-modal").length) {
|
||||||
|
var html = '<div class="modal fade" id="alert-modal" tabindex="-1" role="dialog"> ' +
|
||||||
|
'<div class="modal-dialog modal-sm"> <div class="modal-content"> <div class="modal-header"> ' +
|
||||||
|
'<button type="button" class="close" data-dismiss="modal" aria-label="Close">' +
|
||||||
|
'<spanaria-hidden="true">×</span></button> <h4 class="modal-title">提示</h4> ' +
|
||||||
|
'</div> <div class="modal-body"> <p id="modal-text"></p> </div> <div class="modal-footer"> ' +
|
||||||
|
'<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button> </div> ' +
|
||||||
|
'</div> </div> </div>';
|
||||||
|
$("body").append(html);
|
||||||
|
}
|
||||||
$("#modal-text").html(content);
|
$("#modal-text").html(content);
|
||||||
$("#modal").modal();
|
$("#alert-modal").modal();
|
||||||
}
|
}
|
||||||
return bs_alert;
|
return bs_alert;
|
||||||
});
|
});
|
||||||
@@ -13,12 +13,12 @@ from judger.result import result
|
|||||||
from judger_controller.tasks import judge
|
from judger_controller.tasks import judge
|
||||||
from account.decorators import login_required
|
from account.decorators import login_required
|
||||||
from problem.models import Problem
|
from problem.models import Problem
|
||||||
from utils.shortcuts import serializer_invalid_response, error_response, success_response
|
from utils.shortcuts import serializer_invalid_response, error_response, success_response, error_page
|
||||||
from .serializers import CreateSubmissionSerializer
|
from .serializers import CreateSubmissionSerializer
|
||||||
|
|
||||||
|
|
||||||
def _create_mondodb_connection():
|
def _create_mondodb_connection():
|
||||||
mongodb_setting = settings.DATABASES["mongodb"]
|
mongodb_setting = settings["mongodb_setting"]
|
||||||
connection = pymongo.MongoClient(host=mongodb_setting["HOST"], port=mongodb_setting["PORT"])
|
connection = pymongo.MongoClient(host=mongodb_setting["HOST"], port=mongodb_setting["PORT"])
|
||||||
return connection["oj"]["oj_submission"]
|
return connection["oj"]["oj_submission"]
|
||||||
|
|
||||||
@@ -66,13 +66,31 @@ class SubmissionnAPIView(APIView):
|
|||||||
return error_response(u"提交不存在")
|
return error_response(u"提交不存在")
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
def problem_my_submissions_list_page(request, problem_id):
|
def problem_my_submissions_list_page(request, problem_id):
|
||||||
collection = _create_mondodb_connection()
|
collection = _create_mondodb_connection()
|
||||||
submissions = collection.find({"problem_id": int(problem_id), "user_id": request.user.id},
|
submissions = collection.find({"problem_id": int(problem_id), "user_id": request.user.id},
|
||||||
projection=["result", "accepted_answer_info", "create_time", "language"],
|
projection=["result", "accepted_answer_info", "create_time", "language"],
|
||||||
sort=[["create_time", -pymongo.ASCENDING]])
|
sort=[["create_time", -pymongo.ASCENDING]])
|
||||||
return render(request, "oj/problem/my_submissions_list.html", {"submissions": submissions})
|
try:
|
||||||
|
problem = Problem.objects.get(id=problem_id, visible=True)
|
||||||
|
except Problem.DoesNotExist:
|
||||||
|
return error_page(request, u"问题不存在")
|
||||||
|
return render(request, "oj/problem/my_submissions_list.html",
|
||||||
|
{"submissions": submissions, "problem": problem})
|
||||||
|
|
||||||
|
|
||||||
def my_submission(request, solution_id):
|
@login_required
|
||||||
return render(request, "oj/problem/my_solution.html")
|
def my_submission(request, submission_id):
|
||||||
|
collection = _create_mondodb_connection()
|
||||||
|
submission = collection.find_one({"user_id": request.user.id, "_id": ObjectId(submission_id)},
|
||||||
|
projection=["result", "accepted_answer_info", "create_time",
|
||||||
|
"language", "code", "problem_id", "info"])
|
||||||
|
if not submission:
|
||||||
|
return error_page(request, u"提交不存在")
|
||||||
|
try:
|
||||||
|
problem = Problem.objects.get(id=submission["problem_id"], visible=True)
|
||||||
|
except Problem.DoesNotExist:
|
||||||
|
return error_page(request, u"提交不存在")
|
||||||
|
|
||||||
|
return render(request, "oj/problem/my_submission.html", {"submission": submission, "problem": problem})
|
||||||
@@ -124,23 +124,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="modal fade" id="modal" tabindex="-1" role="dialog">
|
|
||||||
<div class="modal-dialog modal-sm">
|
|
||||||
<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">提示</h4>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
<p id="modal-text"></p>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<script src="/static/js/config.js"></script>
|
<script src="/static/js/config.js"></script>
|
||||||
<script src="/static/js/require.js"></script>
|
<script src="/static/js/require.js"></script>
|
||||||
|
|||||||
@@ -1,120 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
||||||
<meta name="renderer" content="webkit">
|
|
||||||
|
|
||||||
<title>在线评测系统 - 后台管理</title>
|
|
||||||
|
|
||||||
<!-- custom css begin -->
|
|
||||||
{% block css_block %}{% endblock %}
|
|
||||||
<!-- custom css end -->
|
|
||||||
|
|
||||||
<!-- global css begin -->
|
|
||||||
<link href="/static/css/admin.css" rel="stylesheet">
|
|
||||||
<!-- global css end -->
|
|
||||||
</head>
|
|
||||||
|
|
||||||
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<!-- nav begin -->
|
|
||||||
<nav class="navbar navbar-masthead navbar-default navbar-static-top">
|
|
||||||
<div class="container">
|
|
||||||
<div class="navbar-header">
|
|
||||||
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar"
|
|
||||||
aria-expanded="false" aria-controls="navbar">
|
|
||||||
<span class="icon-bar"></span>
|
|
||||||
<span class="icon-bar"></span>
|
|
||||||
<span class="icon-bar"></span>
|
|
||||||
</button>
|
|
||||||
<a class="navbar-brand" href="#">qduoj admin</a>
|
|
||||||
</div>
|
|
||||||
<div id="navbar" class="navbar-collapse collapse">
|
|
||||||
<ul class="nav navbar-nav">
|
|
||||||
<li class="active"><a href="#">主页</a></li>
|
|
||||||
<li><a href="#about">题目</a></li>
|
|
||||||
<li><a href="#contact">提交</a></li>
|
|
||||||
</ul>
|
|
||||||
<ul class="nav navbar-nav navbar-right">
|
|
||||||
<li class="dropdown">
|
|
||||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
|
|
||||||
aria-expanded="false">
|
|
||||||
李扬
|
|
||||||
<span class="caret"></span></a>
|
|
||||||
<ul class="dropdown-menu">
|
|
||||||
<li><a href="#">我的提交</a></li>
|
|
||||||
<li><a href="#">我的资料</a></li>
|
|
||||||
<li role="separator" class="divider"></li>
|
|
||||||
<li><a href="#">退出</a></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
<!-- nav end -->
|
|
||||||
|
|
||||||
<!--browser happy begin -->
|
|
||||||
<!--[if lt IE 9]>
|
|
||||||
<div class="alert alert-danger text-center" role="alert">
|
|
||||||
当前网页 <strong>不支持</strong> 你正在使用的浏览器. 为了正常的访问, 请 <a href="http://browsehappy.com/">升级你的浏览器</a>.
|
|
||||||
</div>
|
|
||||||
<![endif]-->
|
|
||||||
<!-- browser happy end -->
|
|
||||||
|
|
||||||
<div class="container" ms-controller="admin">
|
|
||||||
<div class="row">
|
|
||||||
<!-- admin left begin-->
|
|
||||||
<div class="col-md-2">
|
|
||||||
<ul class="list-group">
|
|
||||||
<li class="list-group-header">List header</li>
|
|
||||||
<li class="list-group-item" id="li-index"><a href="#index">主页</a></li>
|
|
||||||
<li class="list-group-item" id="li-announcement"><a href="#announcement">公告</a></li>
|
|
||||||
<li class="list-group-item"><a href="#">Applications</a></li>
|
|
||||||
<li class="list-group-header">Another list header</li>
|
|
||||||
<li class="list-group-item"><a href="#">Help</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<!-- admin left end -->
|
|
||||||
|
|
||||||
<!-- custom body begin -->
|
|
||||||
{% block body %}{% endblock %}
|
|
||||||
<!-- custom body end -->
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="modal fade" id="modal" tabindex="-1" role="dialog">
|
|
||||||
<div class="modal-dialog modal-sm">
|
|
||||||
<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">提示</h4>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
<p id="modal-text"></p>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<script src="/static/js/config.js"></script>
|
|
||||||
<script src="/static/js/require.js"></script>
|
|
||||||
<script>
|
|
||||||
require(["bootstrap", "admin"]);
|
|
||||||
</script>
|
|
||||||
{% block js_block %}{% endblock %}
|
|
||||||
<!-- footer begin -->
|
|
||||||
<div class="footer">
|
|
||||||
<p class="text-muted text-center">Copyright © 2015 青岛大学信息工程学院 创新实验室</p>
|
|
||||||
</div>
|
|
||||||
<!-- footer end -->
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
7
template/oj/problem/_problem_header.html
Normal file
7
template/oj/problem/_problem_header.html
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
|
||||||
|
<h2 class="text-center">{{ problem.title }}</h2>
|
||||||
|
|
||||||
|
<p class="text-muted text-center">发布时间 : {{ problem.create_time }}
|
||||||
|
时间限制 : {{ problem.time_limit }}ms
|
||||||
|
内存限制 : {{ problem.memory_limit }}M
|
||||||
|
</p>
|
||||||
57
template/oj/problem/my_submission.html
Normal file
57
template/oj/problem/my_submission.html
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
{% extends 'oj_base.html' %}
|
||||||
|
{% block css_block %}
|
||||||
|
<style>
|
||||||
|
.CodeMirror{
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
{% endblock %}
|
||||||
|
{% block body %}
|
||||||
|
{% load submission %}
|
||||||
|
<div class="container main">
|
||||||
|
<ul class="nav nav-tabs nav-tabs-google">
|
||||||
|
<li role="presentation">
|
||||||
|
<a href="/problem/{{ problem.id }}/">题目</a></li>
|
||||||
|
<li role="presentation" class="active"><a href="/problem/{{ problem.id }}/my_submissions/">我的提交</a></li>
|
||||||
|
</ul>
|
||||||
|
{% include "oj/problem/_problem_header.html" %}
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-body">
|
||||||
|
<h4>运行结果 : <span class="text-{{ submission.result|translate_result_class }}">
|
||||||
|
{{ submission.result|translate_result }}
|
||||||
|
</span>
|
||||||
|
</h4>
|
||||||
|
{% ifequal submission.result 0 %}
|
||||||
|
<p>时间 : {{ submission.accepted_answer_info.time }}ms 语言 :
|
||||||
|
{{ submission.language|translate_language }}
|
||||||
|
</p>
|
||||||
|
{% endifequal %}
|
||||||
|
{% ifequal submission.result 4 %}
|
||||||
|
<p>{{ submission.info }}</p>
|
||||||
|
{% endifequal %}
|
||||||
|
<p>提交时间 : {{ submission.create_time }}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="code-field">
|
||||||
|
<textarea id="code-editor">{{ submission.code }}</textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
|
{% block js_block %}
|
||||||
|
<script>
|
||||||
|
require(["jquery", "code_mirror"], function ($, code_mirror) {
|
||||||
|
{% ifequal submission.language 1 %}
|
||||||
|
var language = "text/x-csrc";
|
||||||
|
{% else %}
|
||||||
|
{% ifequal submission.language 2 %}
|
||||||
|
var language = "text/x-c++src";
|
||||||
|
{% else %}
|
||||||
|
var language = "text/x-java";
|
||||||
|
{% endifequal %}
|
||||||
|
{% endifequal %}
|
||||||
|
var code_editor = code_mirror($("#code-editor")[0], language);
|
||||||
|
code_editor.setOption("readOnly", true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
||||||
@@ -6,12 +6,15 @@
|
|||||||
<div class="container main">
|
<div class="container main">
|
||||||
<ul class="nav nav-tabs nav-tabs-google">
|
<ul class="nav nav-tabs nav-tabs-google">
|
||||||
<li role="presentation">
|
<li role="presentation">
|
||||||
<a href="/problem/1/">题目</a></li>
|
<a href="/problem/{{ problem.id }}/">题目</a></li>
|
||||||
<li role="presentation" class="active"><a href="my_solutions_list.html">我的提交</a></li>
|
<li role="presentation" class="active">
|
||||||
|
<a href="/problem/{{ problem.id }}/my_submissions/">我的提交</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<h2 class="text-center">Battle Over Cities - Hard Version</h2>
|
<h2 class="text-center">{{ problem.title }}</h2>
|
||||||
|
|
||||||
<p class="text-muted text-center">cpu: 1000ms 内存: 256M</p>
|
<p class="text-muted text-center">发布时间: {{ problem.create_time }}
|
||||||
|
时间限制: {{ problem.time_limit }}ms
|
||||||
|
内存限制: {{ problem.memory_limit }}M</p>
|
||||||
<table class="table table-bordered">
|
<table class="table table-bordered">
|
||||||
<thead>
|
<thead>
|
||||||
<tr class="" success>
|
<tr class="" success>
|
||||||
@@ -24,17 +27,8 @@
|
|||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for item in submissions %}
|
{% for item in submissions %}
|
||||||
{% ifequal item.result 0 %}
|
<tr class="{{ item.result|translate_result_class }}">
|
||||||
<tr class="success">
|
<th scope="row"><a href="/my_submission/{{ item|translate_id }}/">{{ forloop.counter }}</a></th>
|
||||||
{% else %}
|
|
||||||
{% ifequal item.result 8 %}
|
|
||||||
<tr class="info">
|
|
||||||
{% else %}
|
|
||||||
<tr class="danger">
|
|
||||||
{% endifequal %}
|
|
||||||
|
|
||||||
{% endifequal %}
|
|
||||||
<th scope="row"><a href="/my_solution/{{ item|translate_id }}/">{{ forloop.counter }}</a></th>
|
|
||||||
<td>{{ item.create_time }}</td>
|
<td>{{ item.create_time }}</td>
|
||||||
<td>{{ item.result|translate_result }}</td>
|
<td>{{ item.result|translate_result }}</td>
|
||||||
<td>
|
<td>
|
||||||
@@ -45,15 +39,7 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
{% ifequal item.language 1 %}
|
{{ item.language|translate_language }}
|
||||||
C
|
|
||||||
{% else %}
|
|
||||||
{% ifequal item.language 2 %}
|
|
||||||
C++
|
|
||||||
{% else %}
|
|
||||||
Java
|
|
||||||
{% endifequal %}
|
|
||||||
{% endifequal %}
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|||||||
@@ -5,12 +5,9 @@
|
|||||||
<ul class="nav nav-tabs nav-tabs-google">
|
<ul class="nav nav-tabs nav-tabs-google">
|
||||||
<li role="presentation" class="active">
|
<li role="presentation" class="active">
|
||||||
<a href="problem.html">题目</a></li>
|
<a href="problem.html">题目</a></li>
|
||||||
<li role="presentation"><a href="/problem/1/my_solutions/">我的提交</a></li>
|
<li role="presentation"><a href="/problem/{{ problem.id }}/my_submissions/">我的提交</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<h2 class="text-center">{{ problem.title }}</h2>
|
{% include "oj/problem/_problem_header.html" %}
|
||||||
|
|
||||||
<p class="text-muted text-center">发布时间: {{ problem.create_time }} CPU: {{ problem.time_limit }}ms
|
|
||||||
内存: {{ problem.memory_limit }}M</p>
|
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<div class="problem-section">
|
<div class="problem-section">
|
||||||
|
|||||||
@@ -8,13 +8,13 @@
|
|||||||
|
|
||||||
<title>在线评测系统</title>
|
<title>在线评测系统</title>
|
||||||
|
|
||||||
<!-- custom css begin -->
|
|
||||||
{% block css_block %}{% endblock %}
|
|
||||||
<!-- custom css end -->
|
|
||||||
|
|
||||||
<!-- global css begin -->
|
<!-- global css begin -->
|
||||||
<link href="/static/css/oj.css" rel="stylesheet">
|
<link href="/static/css/oj.css" rel="stylesheet">
|
||||||
<!-- global css end -->
|
<!-- global css end -->
|
||||||
|
|
||||||
|
<!-- custom css begin -->
|
||||||
|
{% block css_block %}{% endblock %}
|
||||||
|
<!-- custom css end -->
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
|
|
||||||
@@ -47,7 +47,7 @@
|
|||||||
<li><a href="/contests/">比赛</a></li>
|
<li><a href="/contests/">比赛</a></li>
|
||||||
<li><a href="/about/">关于</a></li>
|
<li><a href="/about/">关于</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
{% if not request.user.is_authenticated %}
|
{% if request.user.is_authenticated %}
|
||||||
<ul class="nav navbar-nav navbar-right">
|
<ul class="nav navbar-nav navbar-right">
|
||||||
<li class="dropdown">
|
<li class="dropdown">
|
||||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
|
||||||
@@ -80,24 +80,6 @@
|
|||||||
{% block body %}{% endblock %}
|
{% block body %}{% endblock %}
|
||||||
<!-- custom body end -->
|
<!-- custom body end -->
|
||||||
|
|
||||||
<div class="modal fade" id="modal" tabindex="-1" role="dialog">
|
|
||||||
<div class="modal-dialog modal-sm">
|
|
||||||
<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">提示</h4>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
<p id="modal-text"></p>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<script src="/static/js/config.js"></script>
|
<script src="/static/js/config.js"></script>
|
||||||
<script src="/static/js/require.js"></script>
|
<script src="/static/js/require.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -5,6 +5,6 @@
|
|||||||
<title></title>
|
<title></title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
{{ error }}
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@@ -5,6 +5,6 @@
|
|||||||
<title></title>
|
<title></title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
{{ info }}
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
1
utils/templatetags/__init__.py
Normal file
1
utils/templatetags/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
# coding=utf-8
|
||||||
42
utils/templatetags/submission.py
Normal file
42
utils/templatetags/submission.py
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
# coding=utf-8
|
||||||
|
|
||||||
|
|
||||||
|
def translate_result(value):
|
||||||
|
results = {
|
||||||
|
0: "Accepted",
|
||||||
|
1: "Runtime Error",
|
||||||
|
2: "Time Limit Exceeded",
|
||||||
|
3: "Memory Limit Exceeded",
|
||||||
|
4: "Compile Error",
|
||||||
|
5: "Format Error",
|
||||||
|
6: "Wrong Answer",
|
||||||
|
7: "System Error",
|
||||||
|
8: "Waiting"
|
||||||
|
}
|
||||||
|
return results[value]
|
||||||
|
|
||||||
|
|
||||||
|
def translate_id(submission_item):
|
||||||
|
return submission_item["_id"]
|
||||||
|
|
||||||
|
|
||||||
|
def translate_language(value):
|
||||||
|
return {1: "C", 2: "C++", 3: "Java"}[value]
|
||||||
|
|
||||||
|
|
||||||
|
def translate_result_class(value):
|
||||||
|
if value == 0:
|
||||||
|
return "success"
|
||||||
|
elif value == "8":
|
||||||
|
return "info"
|
||||||
|
return "danger"
|
||||||
|
|
||||||
|
|
||||||
|
from django import template
|
||||||
|
|
||||||
|
|
||||||
|
register = template.Library()
|
||||||
|
register.filter("translate_result", translate_result)
|
||||||
|
register.filter("translate_id", translate_id)
|
||||||
|
register.filter("translate_language", translate_language)
|
||||||
|
register.filter("translate_result_class", translate_result_class)
|
||||||
Reference in New Issue
Block a user