Django前后端分离开发-新闻管理系统(六)

项目源码下载:https://github.com/Cherish-sun/NEWS/tree/master

一、新闻搜索功能

# 搜索
def search(request):
    strquery = request.GET.get('query')
    page = int(request.GET.get('page', 1))
    data = {
        "search": strquery,
        "page": page,
        "ordering": '-id',
    }
    article_data = getdata(articles_url, data)
    article_list = article_data["results"]
    # 总记录数
    count = article_data["count"]
    # 下一页
    next = article_data["next"]
    nextpage = page + 1
    # 上一页
    previous = article_data["previous"]
    previouspage = page - 1
    # 总页数
    num_pages = int(count / PAGESIZE)
    curr_url = request.get_full_path()
    nPos = curr_url.find('&page')
    if nPos > 0:
        curr_url = request.get_full_path()[0:nPos]
    else:
       curr_url = request.get_full_path()

    return render(request, 'searchlist.html', locals())

根据传入的字符串查询,并对查询结果分页传给searchlist.html

{% extends 'base.html' %}

{% load staticfiles %}
{% block left_content %}
    <div class="article_div module">
        <ul id="new_div">
        {% if  article_list %}
          {% for article in article_list %}
              <li class="news">
                <div>
                    <div class="flag">推荐</div>
                    <a href="{% url 'article' %}?id={{ article.id }}" target="_blank">
                    <img  src="{{ article.pic }} " class="pic"></a>
                    <div class="detail">
                        <div class="dtitle">
                            <a  href="{% url 'article' %}?id={{ article.id }}" target="_blank"><h2>{{ article.id }}-{{ article.title }}</h2></a>
                        </div>
                        <div class="desc">{{ article.content|striptags|safe|slice:"80" }}</div>
                        <div class="info">
                            <img src="/static/images/neter.jpg" class="img_small"><span>{{ article.author.username }}</span>
                            <div class="pv">
                               <span class="push-time">{{ article.publish_date |date:"Y-m-d H:i:s"}}</span><span class="column">
                               <a href="/">{{ article.item.title }}</a>&nbsp;</span>

                            </div>
                        </div>
                    </div>
                </div>
            </li>
           {% endfor %}
        {% else %}
         <div><img style="width:200px;padding-left:280px; " src="/static/images/nodata1.png"></div>
        {% endif %}
         </ul>

    </div>
    {% include 'page.html' %}

{% endblock %}

page.html

 {% if num_pages > 1 %}
     <div class="more">
            <span class="step-links">
           {% if previous %}
                  <a href="{{ curr_url }}&page={{previouspage}}">上一页</a>
           {% endif %}

          <span class="current">
                  Page {{ page }} of {{  num_pages }}.
          </span>
           <span class="current">
          {% if next %}
                <a href="{{ curr_url }}&page={{nextpage}}" class="nextpage">下一页</a>
                <a  class="nextpage2"></a>
          {% endif %}
          </span>
     </div>
 {% endif %}

二、文章详情页

# 文章详情页
def article(request):
    id = request.GET.get('id')
    articles_url = 'http://127.0.0.1:8005/articleList/'
    # 构造url http://127.0.0.1:8000/article/id/
    articles_url = urljoin(articles_url, id)
    article = getdata(articles_url)
    return render(request, 'article.html', locals())

article.html

{% extends 'base.html' %}
{% load staticfiles %}

{% block left_content %}
   <div class="articlecss">
    <div class="title">
        <h2>{{ article.title }}</h2>
        <div class="postmeta">
          <span class="postmeta_author">{{ article.author.username }}</span>
          <span class="postmeta_category"><a href="" rel="category">{{ article.item.title }}</a></span>
          <span class="a_ilike">浏览数{{ article.read_num }}</span>
            <span class="a_ilike">
            <a  id = 'articlefav'  href="javascript:void(0)">收藏</a>
          </span>
          <span class="postmeta_time">{{ article.publish_date | date:'Y-m-d' }}</span>
        </div>
    </div>
        <div class="article">
         <p> {{ article.content| safe }}</p>
        </div>
        <span class="tags">
            {% for tag in article.tags %}
            <a href="{% url 'tag' %}?tagid={{ tag.id }}" rel="tag">{{ tag.name }}&nbsp;&nbsp;</a>
            {% endfor %}
        </span>
   </div>
<script >

  //收藏
    $('#articlefav').click(function(){
         userid = $.cookie('user_id');
         var isfav =  $('#articlefav').html();
         if (isfav == '已收藏'){
             return;
         }
         if (userid == null){
              $('.cd-user-modal').addClass('is-visible');
              $('#cd-login').addClass('is-selected');
              $('.cd-switcher').children('li').eq(0).children('a').addClass('selected');
              return;
         }
         var var_data = {
                        "articles": {{ article.id }},
                        "user":  userid,
                        "token ": $.cookie('api_token'),
             }
             var json_str = JSON.stringify(var_data);
             $.ajax({
                        url: "http://127.0.0.1:8005/userFav/",
                        type: "POST",
                        data: json_str,
                        contentType: "application/json",
                        dataType: "json",
                        success: function (data) {
                             setTimeout(function(){
                                   }, 1000);
                            //alert(data);
                            if (data) {
                                $('#articlefav').html('已收藏');
                                $form_modal.removeClass('is-visible');
                            }
                            else {
                              // alert(data.msg);
                               signup_selected();
                               ErrorInfo.removeClass().addClass("inputerror").html(data.msg);
                               $('#register-form input[id="email"]').focus();
                               return false;
                            }
                        },
                        error:function(XMLHttpRequest, textStatus, errorThrown){
                           //alert(JSON.stringify(XMLHttpRequest) + "\n" + textStatus + "\n" + errorThrown);
                            //alert(errorThrown);
                         }
                })
             return false;
    })
</script>
{% endblock %}

三、按标签查询对应的文章列表

def tag(request):
    tagid = request.GET.get('tagid')
    page = int(request.GET.get('page', 1))
    data = {
        "tags": tagid,
        "page": page,
        "ordering": '-id',
    }
    article_data = getdata(articles_url, data)
    article_list = article_data["results"]
    # 总记录数
    count = article_data["count"]
    # 下一页
    next = article_data["next"]
    nextpage = page + 1
    # 上一页
    previous = article_data["previous"]
    previouspage = page - 1
    # 总页数
    num_pages = int(count / PAGESIZE)
    curr_url = request.get_full_path()
    nPos = curr_url.find('&page')
    if nPos > 0:
        curr_url = request.get_full_path()[0:nPos]
    else:
        curr_url = request.get_full_path()
    return render(request, 'tag.html', locals())

tag.html

{% extends 'base.html' %}
{% load staticfiles %}
{% block left_content %}
     <div class="topnews">
      <h2>标签{{ request.GET.tag }}</h2>
      {% for article in article_list %}
      <div class="blogs">
        <ul>
          <h3><a href="{% url 'article' %}?id={{ article.id }}">{{ article.title }}</a></h3>
          <p><a href="{% url 'article' %}?id={{ article.id }}">{{ article.desc }}</a></p>
          <p class="autor"><span class="lm f_l">
              {% for tag in article.tag.all %}
                  <a href="/">{{ tag.name }}</a>&nbsp;</span>
              {% endfor %}
              <span class="dtime f_l">{{ article.date_publish | date:'Y-m-d' }}</span>
        </ul>
      </div>
      {% endfor %}
    </div>

{% endblock %}

四、分类页

def category(request):
    categoryid = request.GET.get('cid')
    print(categoryid)
    currcategoryid = request.GET.get('cid')
    print(currcategoryid)
    page = int(request.GET.get('page', 1))
    # 取二级栏目
    data = {
    "categorys": categoryid,
    }
    ul = "http://127.0.0.1:8005/categoryitems/"
    print(ul)
    print(data)
    items_list = getdata(ul, data)
    print(99, items_list)
    # for i in items_li:
    #     items_list = (i["items"])
    # 取新闻
    data = {
        "item__categorys": categoryid,
        "page": page,
        "ordering": '-id',
    }
    article_data = getdata(articles_url, data)

    article_list = article_data["results"]

    # 总记录数
    count = article_data["count"]
    # 下一页
    next = article_data["next"]
    nextpage = page + 1
    # 上一页
    previous = article_data["previous"]
    previouspage = page - 1
    # 总页数
    num_pages = int(count / PAGESIZE)
    curr_url = request.get_full_path()
    nPos = curr_url.find('&page')
    if nPos > 0:
        curr_url = request.get_full_path()[0:nPos]
    else:
        curr_url = request.get_full_path()
    return render(request, 'category.html', locals())

五、根据二级栏目类型取新闻列表

def item(request):
    categoryid = request.GET.get('cid')
    itemid = request.GET.get('itemid')
    page = int(request.GET.get('page', 1))
    # 取二级栏目
    data = {
        "categorys": categoryid,
    }
    items_data = getdata(items_url, data)
    items_list = items_data
    # 取新闻
    data = {
        "item": itemid,
        "page": page,
        "ordering": '-id',
    }
    article_data = getdata(articles_url, data)
    article_list = article_data["results"]

    # 总记录数
    count = article_data["count"]
    # 下一页
    next = article_data["next"]
    nextpage = page + 1
    # 上一页
    previous = article_data["previous"]
    previouspage = page - 1
    # 总页数
    num_pages = int(count / PAGESIZE)
    curr_url = request.get_full_path()
    nPos = curr_url.find('&page')
    if nPos > 0:
        curr_url = request.get_full_path()[0:nPos]
    else:
        curr_url = request.get_full_path()
    return render(request, 'category.html', locals())

category.html

{% extends 'base.html' %}
{% load staticfiles %}
{% block left_content %}
    {% if  items_list %}
        <div class="notes clearfix" id="authors">
        {% for item in items_list %}
                 <li class="clearfix">
                     <a href="{% url 'item' %}?cid={{ item.categorys.id }}&itemid={{ item.id }}">
                         {{ item.title }}
                     </a>&nbsp;&nbsp;
                 </li>
        {% endfor %}
        </div>
    {% endif %}
    <div class="article module">
        <ul id="new_div">
         {% if  article_list %}
            {% for article in article_list %}
              <li class="news">
                <div>
                    <div class="flag">推荐</div>
                    <a href="{% url 'article' %}?id={{ article.id }}" target="_blank"><div class="layer"></div>
                    <img  src="{{ article.pic }} " class="pic"></a>
                    <div class="detail">
                        <div class="dtitle">
                            <a  href="{% url 'article' %}?id={{ article.id }}" target="_blank"><h2>{{ article.id }}-{{ article.title }}</h2></a>
                        </div>
                        <div class="desc">{{ article.content|striptags|safe|slice:"80" }}</div>
                        <div class="info">
                            <img src="/static/images/avatar3.png" class="img_small"><span>{{ article.author.username }}</span></a>
                            <div class="pv">
                                <span class="push-time">{{ article.publish_date }}</span>
                                <span class="column"> <a href="/">{{ article.item.title }}</a>&nbsp;</span>
                            </div>
                        </div>
                      </div>
                </div>
            </li>

           {% endfor %}
         {% else %}
         <div class="nodata"><img style="width:200px;padding-left:280px; " src="/static/images/nodata1.png"></div>
        {% endif %}

         </ul>
    {% include 'page.html' %}
    </div>

{% endblock %}

最后添加urls.py文件中添加路径

path('item/', item, name='item'),
path('tag/', tag, name='tag'),
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335