增加了题目列表页

This commit is contained in:
virusdefender 2015-08-14 16:38:31 +08:00
parent 489bbb841a
commit d031f14a68
4 changed files with 74 additions and 25 deletions

View File

@ -40,8 +40,8 @@ urlpatterns = [
url(r'^api/announcements/$', AnnouncementAPIView.as_view(), name="announcement_list_api"),
url(r'^admin/contest/$', TemplateView.as_view(template_name="admin/contest/add_contest.html"),
name="add_contest_page"),
url(r'^problems/$', TemplateView.as_view(template_name="oj/problem/problem_list.html"),
name="problem_list_page"),
url(r'^problems/$', "problem.views.problem_list_page", name="problem_list_page"),
url(r'^problems/(?P<page>\d+)/$', "problem.views.problem_list_page", name="problem_list_page"),
url(r'^admin/template/(?P<template_dir>\w+)/(?P<template_name>\w+).html$', AdminTemplateView.as_view(),
name="admin_template"),
url(r'^api/admin/group/$', GroupAdminAPIView.as_view(), name="group_admin_api"),

View File

@ -7,6 +7,7 @@ import json
from django.shortcuts import render
from django.db.models import Q
from django.core.paginator import Paginator
from rest_framework.views import APIView
@ -208,7 +209,8 @@ class TestCaseUploadAPIView(APIView):
file_info["test_cases"][str(i + 1)] = {"input_name": str(i + 1) + ".in",
"output_name": str(i + 1) + ".out",
"output_md5": md5.hexdigest(),
"output_size": os.path.getsize(test_case_dir + str(i + 1) + ".out")}
"output_size": os.path.getsize(
test_case_dir + str(i + 1) + ".out")}
# 写入配置文件
open(test_case_dir + "info", "w").write(json.dumps(file_info))
@ -216,4 +218,28 @@ class TestCaseUploadAPIView(APIView):
"file_list": {"input": l[0::2],
"output": l[1::2]}})
else:
return error_response(u"测试用例压缩文件格式错误,请保证测试用例文件在根目录下直接压缩")
return error_response(u"测试用例压缩文件格式错误,请保证测试用例文件在根目录下直接压缩")
def problem_list_page(request, page=1):
problems = Problem.objects.all()
paginator = Paginator(problems, 20)
try:
current_page = paginator.page(int(page))
except Exception:
return error_response(u"不存在的页码")
previous_page = next_page = None
try:
previous_page = current_page.previous_page_number()
except Exception:
pass
try:
next_page = current_page.next_page_number()
except Exception:
pass
return render(request, "oj/problem/problem_list.html", {"problems": current_page, "page": int(page),
"previous_page": previous_page, "next_page": next_page})

View File

@ -1,11 +1,17 @@
{% extends "oj_base.html" %}
{% block body %}
{% load problem %}
<div class="container main" ms-controller="problem_list">
<div class="row">
<div class="col-lg-9">
<div class="row">
<div class="col-lg-3 col-lg-offset-9">
<input type="text" class="form-control" placeholder="搜索题号,标题">
<div style="float: right;">
<form class="form-inline" onsubmit="return false;">
<div class="form-group-sm">
<input name="keyWord" class="form-control" placeholder="请输入关键词" ms-duplex="key_word">
<input type="submit" value="搜索" class="btn btn-primary" ms-click="getPage(1)">
</div>
</form>
</div>
</div>
<div>
@ -19,28 +25,31 @@
</tr>
</thead>
<tbody>
<tr>
<th scope="row"><a href="/problem/1/">1</a></th>
<td><a href="/problem/1/">Mark</a></td>
<td>Otto</td>
<td>@mdo</td>
</tr>
<tr>
<th scope="row">2</th>
<td>Jacob</td>
<td>Thornton</td>
<td>@fat</td>
</tr>
<tr>
<th scope="row">3</th>
<td>Larry</td>
<td>the Bird</td>
<td>@twitter</td>
</tr>
{% for item in problems %}
<tr>
<th scope="row"><a href="/problem/{{ item.id }}/">{{ item.id }}</a></th>
<td><a href="/problem/1/">{{ item.title }}</a></td>
<td>{{ item.difficulty }}</td>
<td>{{ item|accepted_radio }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<nav>
<ul class="pager">
{% if previous_page %}
<li class="previous"><a href="/problems/{{ previous_page }}/"><span
aria-hidden="true">&larr;</span> 上一页</a></li>
{% endif %}
{% if next_page %}
<li class="next"><a href="/problems/{{ next_page }}/">下一页 <span
aria-hidden="true">&rarr;</span></a></li>
{% endif %}
</ul>
</nav>
</div>
</div>
<div class="col-lg-3">
<div class="panel panel-info">
<div class="panel-heading">
@ -87,5 +96,5 @@
{% endblock %}
{% block js_block %}
<script src="/static/js/app/oj/problem/problem_list.js"></script>
<script src="/static/js/app/oj/problem/problem_list.js"></script>
{% endblock %}

View File

@ -0,0 +1,14 @@
# coding=utf-8
def get_problem_accepted_radio(problem):
if problem.total_accepted_number:
return int((problem.total_accepted_number * 100) / problem.total_submit_number)
return 0
from django import template
register = template.Library()
register.filter("accepted_radio", get_problem_accepted_radio)