写Django时,一些实用的方法

1.safe过滤

有时,数据是在某些网站爬下来的,带有很多标签,这时显示的话,会是这样的:
在这里插入图片描述

如果加入safe,在这里插入图片描述
它会自动过滤标签
在这里插入图片描述

2.前端时间显示包含T和Z问题

这是由于传回到前端的时间格式是json格式,需要转换一下才能转回正常形式。

现成脚本:

function dateFormat(time) {
  // 获取当前的时间戳
  let timeNow = Date.now();
  // 获取发表文章的时间戳
  let TimeStamp = new Date(time).getTime();
  // 转为秒
  let second = (timeNow - TimeStamp) / 1000;
  if (second < 60) {
    return '刚刚'
  } else if (second >= 60 && second < 60 * 60) {
    let minute = Math.floor(second / 60);
    return `${minute}分钟前`;
  } else if (second >= 60 * 60 && second < 60 * 60 * 24) {
    let hour = Math.floor(second / 60 / 60);
    return `${hour}小时前`;
  } else if (second >= 60 * 60 * 24 && second < 60 * 60 * 24 * 30) {
    let day = Math.floor(second / 60 / 60 / 24);
    return `${day}天前`;
  } else {
    let date = new Date(TimeStamp);
    let Y = date.getFullYear() + '/';
    let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '/';
    let D = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate()) + ' ';
    let h = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':';
    let m = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes());
    return Y + M + D + h + m;
  }

然后调用时,就可以直接

dateFormat(one_news.update_time)

3.获取并整理cookie

现成脚本

    // get cookie using jQuery
    function getCookie(name) {
        let cookieValue = null;
        if (document.cookie && document.cookie !== '') {
            let cookies = document.cookie.split(';');
            for (let i = 0; i < cookies.length; i++) {
                let cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) === (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }

此时只要输入需要获取的cookie名字,就可以返回值了,如:

getCookie("csrftoken")

4.浏览器窗口滑动加载内容

  $(window).scroll(function () {

    // 浏览器窗口高度
    let showHeight = $(window).height();

    // 整个网页的高度
    let pageHeight = $(document).height();

    // 页面可以滚动的距离
    let canScrollHeight = pageHeight - showHeight;

    // 页面滚动了多少,这个是随着页面滚动实时变化的
    let nowScroll = $(document).scrollTop();

    if ((canScrollHeight - nowScroll) < 20) {
      // 判断页数,去更新新闻数据
      //   bIsLoadData为false才能进去
      if (!bIsLoadData) {
        bIsLoadData = true;
        // 如果当前页数据如果小于总页数,那么才去加载数据
        if (iPage < iTotalPage) {
          iPage = iPage + 1;
          $(".btn-more").remove();  // 删除标签
          // 去加载数据
          fn_load_content();
        } else {
          message.showInfo('已全部加载,没有更多内容!');
          $(".btn-more").remove();  // 删除标签
          $(".news-list").append($('<a href="javascript:void(0);" class="btn-more">已全部加载,没有更多内容!</a>'))
        }
      }
    }
  });

5.使用a标签时,网址的拼接问题

比如在写项目的时候,有个网址是127.0.0.1:8000/news/1540,而在这个网址里面可以点击另外一个链接,但是其访问的视图是同一个视图,

<a href="news/12345">  </a>

直接点击的话,会拼接成
127.0.0.1:8000/news/1540/news/12345
我们想要访问的url是
127.0.0.1:8000/news/12345
这时需要这样改,

<a href="../../news_detail/12345">  </a>

相当于路径拼接

6.Django中模型类的字段正序倒序排列问题

# 请看实例
author_hot_news = News.objects.select_related('author', 'tag').only(
			'digest', 'image_url', 'tag__name', 'update_time', 'title','author__username'
		).filter(is_delete=False, author=news.author).order_by('-clicks')[0:3]

order_by()里添加字段名,表示把字段按照从小到大的正序排序,字段名前面加减号-表示从大到小排序。
同时也可以使用切片操作,选择显示哪几条数据。

7.标签过滤时间格式

可以使用自带的:
{{ news.update_time | date:“Y/m/d h:i:s”}}
字母Ymdhis分别代表年月日时分秒
举例说明:
Y:2020;y:20
m:4;M:四月
d:这个是数字形式,几号;D:星期()
h:十二小时制;H:二十四小时制
i:分;I:无
s:秒;S:无

它还有自带的timeuntil和timesince


使用jQuery获取不到页面元素时

首先,如果元素本身是在html文件中就存在的话,无论如何都会获取得到的,如果获取不到就查看一下自己的选择器是否正确。
另外,如果在一个js文件中,html页面元素是通过ajax动态加载的话,像平常那样获取是获取不到的,因为可能是在获取元素时,ajax还没有加载完成,自然获取不到元素。还有可能是ajax成功执行,但是它还没有渲染到html文件中(这时搞个flag控制也是于事无补),就已经开始获取元素,这一样是不行的。
这时就需要用到ajaxComplete函数,一般在使用时,都是将ajaxComplete绑定在document上,也就是等全部东西加载完时,才执行需要的步骤:

$(document).ajaxComplete(function () {

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值