Django parse a json/dictionary reminder on template

如果想在一个Django template里引入json, 正确的template写法为

python的views.py的写法

# -*- coding: utf-8 -*-
from django.shortcuts import render
from django.http import Http404, HttpResponse

def get_product(request):
    context1 = {}
    context1['env'] = 'production'
    context1['mydict'] = {"key1":"value1", "key2":"value2", "key3":"value3", "key4":"value4"}
    context1['days'] = [1,2,3]

    if request.GET.get("item") == "ec2" or not request.GET.get("item"):
        return render(request, 'main_content.html', context1)
    else:
        raise Http404()

main_content.html使用extends引入index.html

{% extends 'index.html' %}
    {% block content %}
        {% for day in days %}
        <li>day: {{ day }}</li>
        {% endfor %}
    {% endblock %}

index.html使用include引入sidebar.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <div class="header">My page</div>
    <div class="content">
        <div class="sidebar">

            <ul>
                {% if env == 'production' %}
                    {% include 'production.sidebar.html' %}
                {% elif env == 'development' %}
                    {% include 'development.sidebar.html' %}
                {% elif env == 'staging' %}
                    {% include 'staging.sidebar.html' %}
                {% elif env == 'legacy' %}
                    {% include 'legacy.sidebar.html' %}
                {% endif %}
            </ul>

        </div>
        <div class="maincontent">

            {% block content %} {% endblock %}

        </div>
    </div>
</body>
</html>

继续阅读

使用pytest进行批量测试

Pytest是python的一个测试模块,可以编写一些简单的测试用例,也可以用来进行一些批量测试,下面简单介绍一下。

1,安装

$ pip install -U pytest
or
$ easy_install -U pytest

$ py.test --version

2,基础语法

#!/usr/bin/python
import pytest

def func(x):
    return x + 1

def test_answer():    #测试用例,方法需要以test_开头
    assert func(3) == 5

运行之

$ py.test 2.py    #注意需要用py.test命令来运行之

稍微复杂一点儿的写法:

#!/usr/bin/python
import pytest

class TestClass:

    def test_one(self):
        x = "this"
        assert "h" in x

    def test_two(self):
        x = 3
        assert x > 2

继续阅读

Python tips – 轻松转换列表与字符串

There are a few useful tips to convert a Python list (or any other iterable such as a tuple) to a string for display.

First, if it is a list of strings, you may simply use join this way:

>>> mylist = ['spam', 'ham', 'eggs']
>>> print ', '.join(mylist)
spam, ham, eggs

Using the same method, you might also do this:

>>> print '\n'.join(mylist)
spam
ham
eggs

However, this simple method does not work if the list contains non-string objects, such as integers.

If you just want to obtain a comma-separated string, you may use this shortcut:

>>> list_of_ints = [80, 443, 8080, 8081]
>>> print str(list_of_ints).strip('[]')
80, 443, 8080, 8081

Or this one, if your objects contain square brackets:

>>> print str(list_of_ints)[1:-1]
80, 443, 8080, 8081

Finally, you may use map() to convert each item in the list to a string, and then join them:

>>> print ', '.join(map(str, list_of_ints))
80, 443, 8080, 8081
>>> print '\n'.join(map(str, list_of_ints))
80
443
8080
8081

pip, easy_install使用方式

easy_install 跟 pip 都是 Python 的套件管理程序,有了它们,在使用 Python 开发程序的时候会带來不少方便。
easy_install 和 pip 有什么不一样?据 pip 官网的说法,pip 改善了不少 easy_install 的缺点,如此说來 pip 应该是略胜一筹,不过它还不能够完全取代对方,因为目前有很多套件还是得用 easy_install 安裝。

安装使用easy_install

安装:
$ wget -q http://peak.telecommunity.com/dist/ez_setup.py
$ python ./ez_setup.py

使用:
$ easy_install PackageName     #安装套件
$ easy_install -U PackageName  #更新套件
$ easy_install -m PackageName  #卸载套件
$ easy_install --showhelp      #显示说明

继续阅读

python遍历文件脚本实例

自己写的一个Python遍历文件脚本,对查到的文件进行特定的处理。没啥技术含量,但是也记录一下吧。

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import os
import shutil
dir = "/mnt/Packages"
class Packages:
    def __init__(self,srcdir,desdir):
        self.sdir=srcdir
        self.ddir=desdir
    def check(self):
        print('program start...')
        for dirpath, dirnames, filenames in os.walk(self.sdir):   #遍历文件
            for filename in filenames:
                thefile=os.path.join(dirpath,filename)            #文件的绝对地址
                try:
                    if os.path.splitext(thefile)[1]=='.rpm':      #筛选.rpm格式的文件
                        #print('Fount rpm package: ' + thefile)
                        if 'inspuer' in os.popen('rpm -qpi ' + thefile).read().rstrip():
                            print('Found error package: ' + thefile)
                            shutil.copy(thefile, self.ddir)  #将错误文件复制到desdir目录
                            f = open('list.txt', 'a')    #将错误文件列表写入到list.txt
                            f.write(filename + '\n')
                            f.close()
                except IOError, err:
                    print err
                    sys.exit()

if __name__ == '__main__':
    dir=Packages('/mnt/cdrom','/mnt/erpm')   #源目录为/mnt/cdrom,目标目录为/mnt/erpm
    dir.check()

使用youtube-dl下载youtube视频

youtube-dl是一个使用python编写的脚本,可以下载热门视频网站的视频。在Linux系统下可以一健下载Youtube、Youku、Tudou等热门网站的视频,甚至是一些XXX网站的视频下载,如YouPorn、XVideos等。下面介绍使用方法。

1,准备工作(安装python)

[root@bear ~]# sudo yum install python

youtube-dl需要Python 2.6以上的版本。如果你的系统是CentOS 5,请根据这篇文章更新Python版本。CentOS 6里已经自带了Python 2.6,所以不需要更新。

2,下载及使用

[root@bear ~]# sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o  /usr/local/bin/youtube-dl
[root@bear ~]# chmod a+x /usr/local/bin/youtube-dl

使用方法

[root@bear ~]# youtube-dl --max-quality url http://www.youtube.com/watch?v=XXXXXX
[root@bear ~]# youtube-dl --max-quality url http://v.youku.com/v_show/id_XXXXXX.html

其它选项 继续阅读

Python re正则匹配中文

Python re正则匹配中文,其实非常简单,把中文的unicode字符串转换成utf-8格式就可以了,然后可以在re中随意调用将输入的utf-8中文解密为unicode,然后交由python处理(2014.10.09感谢QQ85897930纠正)。

unicode中中文的编码为/u4e00-/u9fa5,因此正则表达式u”[\u4e00-\u9fa5]+”可以表示一个或者多个中文字符

>>> import re

>>> s='中文:123456aa哈哈哈bbcc'.decode('utf8')
>>> s
u'\u4e2d\u6587\uff1a123456aa\u54c8\u54c8\u54c8bbcc'
>>> print s
中文:123456aa哈哈哈bbcc

>>> re.match(u"[\u4e00-\u9fa5]+",s)
<_sre.SRE_Match object at 0xb77742c0>

>>> pat='中文'.decode("utf8")
>>> re.search(pat,s)
<_sre.SRE_Match object at 0x16a16df0>

>>> newpat='这里是中文内容'.decode("utf8")

>>> news=re.sub(pat,newpat,s)
>>> print news
这里是中文内容:123456aa哈哈哈bbcc

继续阅读