Skip to content

Instantly share code, notes, and snippets.

@yinzishao
Created March 24, 2016 11:53
Show Gist options
  • Save yinzishao/7c98426911a67d16a41f to your computer and use it in GitHub Desktop.
Save yinzishao/7c98426911a67d16a41f to your computer and use it in GitHub Desktop.
my_blog
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectLevelVcsManager" settingsEditedManually="false">
<OptionsSetting value="true" id="Add" />
<OptionsSetting value="true" id="Remove" />
<OptionsSetting value="true" id="Checkout" />
<OptionsSetting value="true" id="Update" />
<OptionsSetting value="true" id="Status" />
<OptionsSetting value="true" id="Edit" />
<ConfirmationsSetting value="0" id="Add" />
<ConfirmationsSetting value="0" id="Remove" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.4.3 (/usr/bin/python3.4)" project-jdk-type="Python SDK" />
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/my_blog.iml" filepath="$PROJECT_DIR$/.idea/my_blog.iml" />
</modules>
</component>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="" />
</component>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<option name="TRACKING_ENABLED" value="true" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="ChangesViewManager" flattened_view="true" show_ignored="false" />
<component name="CreatePatchCommitExecutor">
<option name="PATCH_PATH" value="" />
</component>
<component name="NamedScopeManager">
<order />
</component>
<component name="ProjectLevelVcsManager" settingsEditedManually="false">
<OptionsSetting value="true" id="Add" />
<OptionsSetting value="true" id="Remove" />
<OptionsSetting value="true" id="Checkout" />
<OptionsSetting value="true" id="Update" />
<OptionsSetting value="true" id="Status" />
<OptionsSetting value="true" id="Edit" />
<ConfirmationsSetting value="0" id="Add" />
<ConfirmationsSetting value="0" id="Remove" />
</component>
<component name="PropertiesComponent">
<property name="settings.editor.selected.configurable" value="configurable.group.appearance" />
<property name="settings.editor.splitter.proportion" value="0.2" />
</component>
<component name="ShelveChangesManager" show_recycled="false" />
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<option name="number" value="Default" />
</task>
<servers />
</component>
<component name="VcsContentAnnotationSettings">
<option name="myLimit" value="2678400000" />
</component>
<component name="XDebuggerManager">
<breakpoint-manager />
<watches-manager />
</component>
</project>
from django.contrib import admin
from article.models import Article
# Register your models here.
admin.site.register(Article)
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
]
operations = [
migrations.CreateModel(
name='Article',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('title', models.CharField(max_length=100)),
('category', models.CharField(max_length=50, blank=True)),
('date_time', models.DateTimeField(auto_now_add=True)),
('content', models.TextField(null=True, blank=True)),
],
options={
'ordering': ['-date_time'],
},
),
]
#coding=utf-8
from django.core.urlresolvers import reverse
from django.db import models
# Create your models here.
class Article(models.Model):
title = models.CharField(max_length = 100) #博客题目
category = models.CharField(max_length = 50, blank = True) #博客标签
date_time = models.DateTimeField(auto_now_add = True) #博客日期
content = models.TextField(blank = True, null = True) #博客文章正文
#获取URL并转换成url的表示格式
def get_absolute_url(self):
path = reverse('detail', kwargs={'id':self.id})
return "http://127.0.0.1:8000%s" % path
def __unicode__(self) :
return self.title
class Meta: #按时间下降排序
ordering = ['-date_time']
#coding=utf-8
import markdown
from django import template
from django.template.defaultfilters import stringfilter
from django.utils.encoding import force_text
from django.utils.safestring import mark_safe
register = template.Library() #自定义filter时必须加上
@register.filter(is_safe=True) #注册template filter
@stringfilter #希望字符串作为参数
def custom_markdown(value):
return mark_safe(markdown.markdown(value,
extensions = ['markdown.extensions.fenced_code', 'markdown.extensions.codehilite'],
safe_mode=True,
enable_attributes=False))
from django.test import TestCase
# Create your tests here.
from django.http import HttpResponse, Http404
from django.shortcuts import render
# Create your views here.
from models import Article
def home(request):
post_list = Article.objects.all()
return render(request,'home.html',{"post_list":post_list})
# return render(request,'test.html')
# return HttpResponse(str(2))
def detail(request, id):
try:
post = Article.objects.get(id=str(id))
except Article.DoesNotExist:
raise Http404
return render(request, 'post.html', {'post' : post})
def archives(request):
try:
post_list = Article.objects.all()
except Article.DoesNotExist:
raise Http404
return render(request,'archives.html',{'post_list':post_list})
def search_tag(request, tag) :
try:
post_list = Article.objects.filter(category__iexact = tag) #contains
except Article.DoesNotExist :
raise Http404
return render(request, 'tag.html', {'post_list' : post_list})
SQLite format 3@ 3E+3-��&������ )!  Y��d��I��Y2 %Aarticle0001_initial2016-03-22 13:11:02.3070063
%Asessions0001_initial2016-03-22 12:55:44.692514A IAauth0006_require_contenttypes_00022016-03-22 12:55:44.491860BKAauth0005_alter_user_last_login_null2016-03-22 12:55:44.391047@GAauth0004_alter_user_username_opts2016-03-22 12:55:44.156146CMAauth0003_alter_user_email_max_length2016-03-22 12:55:43.910666HWAauth0002_alter_permission_name_max_length2016-03-22 12:55:43.664562H%GAcontenttypes0002_remove_content_type_name2016-03-22 12:55:43.4514290%Aadmin0001_initial2016-03-22 12:55:43.161393/%Aauth0001_initial2016-03-22 12:55:42.9269827%%Acontenttypes0001_initial2016-03-22 12:55:42.658758 �V����lV
-django_admin_log  +article_article3django_content_type+auth_permission�  auth_user/django_migrations
����������������������   
    v������varticlearticlesessionssession%#contenttypescontenttype authuser authgroup!authpermissionadminlogentry
w�w�����articlearticlesessionssession%#contenttypescontenttype authuserauthgroup!authpermission adminlogentry VV�' �'  - AApbkdf2_sha256$20000$FMJ60LhmaUoX$f+Q8olH8AgwLn1yaIvMJj66sW02g1ibEqu1T72ptPNM=yinzishao370953598@qq.com2016-03-22 13:00:24.4187492016-03-22 13:02:33.524536 qCC�Cx���Y//�atabledjango_migrationsdjango_migrationsCREATE TABLE "django_migrations" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "app" varchar(255) NOT NULL, "name" varchar(255) NOT NULL, "applied" datetime NOT NULL)P++Ytablesqlite_sequencesqlite_sequenceCREATE TABLE sqlite_sequence(name,seq)?�!!�ktableauth_groupauth_group
CREATE TABLE "auth_group" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "name" varchar(80) NOT NULL UNIQUE)3 G!indexsqlite_autoindex_auth_group_1auth_group �8
99� tableauth_group_permissionsauth_group_permissions CREATE TABLE "auth_group_permissions" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "group_id" integer NOT NULL REFERENCES "auth_group" ("id"), "permission_id" integer NOT NULL REFERENCES "auth_permission" ("id"), UNIQUE ("group_id", "permission_id"))K _9indexsqlite_autoindex_auth_group_permissions_1auth_group_permissions ������3�--�[tableauth_user_groupsauth_user_groupsCREATE TABLE "auth_user_groups" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "user_id" integer NOT NULL REFERENCES "auth_user" ("id"), "group_id" integer NOT NULL REFERENCES "auth_group" ("id"), UNIQUE ("user_id", "group_id"))?S-indexsqlite_autoindex_auth_user_groups_1auth_user_groups 
 
 ���;M�Ac7wj76gmow7jk95f0dm0cb4igh97d4hpYzNkMDk5YzJiMjZmMjE2OWM4ZDRiYTYwNGQwNDBmMmFiYWM1NWM3Yjp7Il9hdXRoX3VzZXJfaGFzaCI6ImM1MGVmNTJlOTRkODc2NDk2NjliY2FjZWI0MGJkOTY1ODM4NjlkZGQiLCJfYXV0aF91c2VyX2JhY2tlbmQiOiJkamFuZ28uY29udHJpYi5hdXRoLmJhY2tlbmRzLk1vZGVsQmFja2VuZCIsIl9hdXRoX3VzZXJfaWQiOiIxIn0=2016-04-05 13:02:33.637069
��#M c7wj76gmow7jk95f0dm0cb4igh97d4hp ##g�X�|�AAA� tableauth_user_user_permissionsauth_user_user_permissionsCREATE TABLE "auth_user_user_permissions" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "user_id" integer NOT NULL REFERENCES "auth_user" ("id"), "permission_id" integer NOT NULL REFERENCES "auth_permission" ("id"), UNIQUE ("user_id", "permission_id"))SgAindexsqlite_autoindex_auth_user_user_permissions_1auth_user_user_permissions�K9�;indexauth_group_permissions_0e939a4fauth_group_permissionsCREATE INDEX "auth_group_permissions_0e939a4f" ON "auth_group_permissions" ("group_id")�K9�Eindexauth_group_permissions_8373b171auth_group_permissionsCREATE INDEX "auth_group_permissions_8373b171" ON "auth_group_permissions" ("permission_id")�?-�!indexauth_user_groups_e8701ad4auth_user_groupsCREATE INDEX "auth_user_groups_e8701ad4" ON "auth_user_groups" ("user_id")�?-�#indexauth_user_groups_0e939a4fauth_user_groupsCREATE INDEX "auth_user_groups_0e939a4f" ON "auth_user_groups" ("group_id") 
 
 oo�u�(SA�Iindexauth_user_user_permissions_e8701ad4auth_user_user_permissionsCREATE INDEX "auth_user_user_permissions_e8701ad4" ON "auth_user_user_permissions" ("user_id")�.SA�Uindexauth_user_user_permissions_8373b171auth_user_user_permissionsCREATE INDEX "auth_user_user_permissions_8373b171" ON "auth_user_user_permissions" ("permission_id")�'--�tabledjango_admin_logdjango_admin_logCREATE TABLE "django_admin_log" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "action_time" datetime NOT NULL, "object_id" text NULL, "object_repr" varchar(200) NOT NULL, "action_flag" smallint unsigned NOT NULL, "change_message" text NOT NULL, "content_type_id" integer NULL REFERENCES "django_content_type" ("id"), "user_id" integer NOT NULL REFERENCES "auth_user" ("id"))�?-�1indexdjango_admin_log_417f1b1cdjango_admin_logCREATE INDEX "django_admin_log_417f1b1c" ON "django_admin_log" ("content_type_id")
��  yinzishao



 ��]H���?-�!indexdjango_admin_log_e8701ad4django_admin_log!CREATE INDEX "django_admin_log_e8701ad4" ON "django_admin_log" ("user_id")�h33�wtabledjango_content_typedjango_content_typeCREATE TABLE "django_content_type" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "app_label" varchar(100) NOT NULL, "model" varchar(100) NOT NULL, UNIQUE ("app_label", "model"))EY3indexsqlite_autoindex_django_content_type_1django_content_type�/ ++�tableauth_permissionauth_permission"CREATE TABLE "auth_permission" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "content_type_id" integer NOT NULL REFERENCES "django_content_type" ("id"), "codename" varchar(100) NOT NULL, "name" varchar(255) NOT NULL, UNIQUE ("content_type_id", "codename"))=!Q+indexsqlite_autoindex_auth_permission_1auth_permission#

 ��D���H��D? A- 2016-03-23 09:18:45.5538913markdown Changed content.? A- 2016-03-23 09:18:26.0311553markdown Changed content.?
A- 2016-03-23 09:18:01.8776533markdown Changed content.? A- 2016-03-23 09:17:46.5256853markdown Changed content.? A- 2016-03-23 09:17:22.9707873markdown Changed content.? A- 2016-03-23 09:10:35.9002043markdown Changed content.? A- 2016-03-23 09:09:36.4125973markdown Changed content.. A  2016-03-23 09:07:46.8603623markdown H A1- 2016-03-22 14:24:00.6207582第一篇博客!Changed content.H A1- 2016-03-22 14:23:35.4978582第一篇博客!Changed content.7 A1  2016-03-22 14:23:10.7890502第一篇博客!7 A1  2016-03-22 13:11:15.4546251第一篇博客!
�������������  
   ��jG�"=+�-indexauth_permission_417f1b1cauth_permissionCREATE INDEX "auth_permission_417f1b1c" ON "auth_permission" ("content_type_id")�''�tableauth_userauth_userCREATE TABLE "auth_user" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "password" varchar(128) NOT NULL, "is_superuser" bool NOT NULL, "username" varchar(30) NOT NULL UNIQUE, "first_name" varchar(30) NOT NULL, "last_name" varchar(30) NOT NULL, "email" varchar(254) NOT NULL, "is_staff" bool NOT NULL, "is_active" bool NOT NULL, "date_joined" datetime NOT NULL, "last_login" datetime NULL)1(Eindexsqlite_autoindex_auth_user_1auth_user�6)))�'tabledjango_sessiondjango_sessionCREATE TABLE "django_session" ("session_key" varchar(40) NOT NULL PRIMARY KEY, "session_data" text NOT NULL, "expire_date" datetime NOT NULL)
�������������     
          ����`2����`>���g?��&)1delete_articleCan delete article&)1change_articleCan change article #+add_articleCan add article&)1delete_sessionCan delete session&)1change_sessionCan change session #+add_sessionCan add session/1;delete_contenttypeCan delete content type/1;change_contenttypeCan change content type) +5add_contenttypeCan add content type #+delete_userCan delete user #+change_userCan change user
%add_userCan add user" %-delete_groupCan delete group"%-change_groupCan change group'add_groupCan add group,/7delete_permissionCan delete permission,/7change_permissionCan change permission&)1add_permissionCan add permission( +5delete_logentryCan delete log entry( +5change_logentryCan change log entry" %/add_logentryCan add log entry
W������p]J;)������lW)delete_article)change_article#add_article)delete_session)change_session#add_session1delete_contenttype1change_contenttype+add_contenttype #delete_user #change_user add_user
%delete_group %change_groupadd_group/delete_permission/change_permission)add_permission +delete_logentry +change_logentry % add_logentry
��A 2016-04-05 13:02:33.637069 �����KA�Cmarkdown 测试2016-03-23 09:07:46.836055>这里是标题!
```python
class Test:
pass
```
#一级标题
# 这是 H1
## 这是 H2
###### 这是 H6
* Red
* Green
* Blue�� 1A��S第一篇博客!随笔!2016-03-22 14:23:10.787863
自强学堂
自强学堂:学习、分享、让你更强!
Django 教程 HTML CSS JAVASCRIPT JQUERY SQL PHP BOOTSTRAP ANGULAR XML
在线教程 参考手册 在线实例
Django 基础教程
Django 基础教程
Django 简介
Django 环境搭建
Django 基本命令
Django 视图与网址
Django 视图与网址进阶
Django 模板(templates)
Django 模板进阶
Django 模型(数据库)
Django 自定义 Field
Django 数据表更改
Django QuerySet API
Djan'A1A第一篇博客!随笔!2016-03-22 13:11:15.452833测试 SS�;*O)indexsqlite_autoindex_django_session_1django_session|+;)�!indexdjango_session_de54fa62django_session$CREATE INDEX "django_session_de54fa62" ON "django_session" ("expire_date")�o,++�tablearticle_articlearticle_article%CREATE TABLE "article_article" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "title" varchar(100) NOT NULL, "category" varchar(50) NOT NULL, "date_time" datetime NOT NULL, "content" text NULL)(go 后台
Django 表单
Django 配置
Django 静态文件
Django 部署 (Apache)
Django 部署 (Nginx)
Django 发送邮件
Django 中级教程
Django 数据导入
Django 数据迁移
Django 多数据库联用
Django 用户注册系统
Django 缓存系统
Django 生成静态网页
Django 安全
Django 国际化
Django session
Django传递数据给JS
Django Ajax
Django Ajax CSRF 认证
Django Sitemap 站点地图
只用 Django 数据库
Django 通用视图
Django 上下文渲染器
Django 中间件
Django 微信接口
Django 单元测试
Django 项目实战
开发内容管理系统
其它(书写中)
Django 应用分享
Django CMS
Python/Django 二维码
如果您认为本站教程很有帮助,可以小额赞助以鼓励翻译或写出更多高质量教程。
点击支持 Django 1.9 教程的更新
Django 视图与网址进阶
« Django 视图与网址
Django 模板 »
一 、在网页上做加减法
1. 采用 /add/?a=4&b=5 这样GET方法进行
)django-admin.py startproject zqxt_views
cd zqxt_views
python manage.py startapp calc
自动生成目录大致如下(因不同的 Django 版本有一些差异,如果差异与这篇文章相关,我会主动提出来,没有说的,暂时可以忽略他们之间的差异,后面的教程也是这样做):
zqxt_views/
├── calc
│ ├── __init__.py
│ ├── admin.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── manage.py
└── zqxt_views
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
我们修改一下 calc/views.py文件
from django.shortcuts import render
from django.http import HttpResponse
def add(request):
a = request.GET['a']
b = request.GET['b']
c = int(a)+int(b)
return HttpResponse(str(c))
注:request.GET 类似于一个字典,更好的办法是用 request.GET.get('a', 0) 当没有传递 a 的时候默认 a 为 0
接着*修改 zqxt_views/urls.py 文件,添加一个网址来对应我们刚才新建的视图函数。
Django 1.7.x 及以下的同学可能看到的是这样的:
from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
# Examples:
url(r'^add/$', 'calc.views.add', name='add'), # 注意修改了这一行
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
)
Django 1.8.x及以上,Django 官方鼓励(或说要求)先引入,再使用,低版本的 Django 也可以这样用:
from django.conf.urls import url
from django.contrib import admin
from calc import views as calc_views
urlpatterns = [
url(r'^add/', calc_views.add, name='add'), # 注意修改了这一行
url(r'^admin/', admin.site.urls),
]
我们打开开发服务器并访问
python manage.py runserver
如果提示 Error: That port is already in use.在后面加上端口�+�8001,8888等
python manage.py runserver 8001
打开网址:http://127.0.0.1:8000/add/ 就可以看到
MultiValueDictKeyError at /add/
这是因为我们并没有传值进去,我们在后面加上 ?a=4&b=5,即访问 http://127.0.0.1:8000/add/?a=4&b=5
就可以看到网页上显示一个 9,试着改变一下a和b对应的值试试看?
2. 采用 /add/3/4/ 这样的网址的方式
前面介绍的时候就说过 Django 支持优雅的网址
我们接着修改 calc/views.py文件,再新定义一个add2 函数,原有部分不再贴出
def add2(request, a, b):
c = int(a) + int(b)
return HttpResponse(str(c))
接着修改 zqxt_views/urls.py 文件,再添加一个新的 url
Django 1.7.x 及以下:
url(r'^add/(\d+)/(\d+)/$', 'calc.views.add2', name='add2'),
Django 1.8.x 及以上:
url(r'^add2/(\d+)/(\d+)/$', calc_views.add2, name='add2'),
我们可以看到网址中多了 (\d+), 正则表达式中 \d 代表一个数字,+ 代表一个或多,个前面的字符,写在一起 \d+ 就是一个或多个数字,用括号括起来的意思是保存为一个子组(更多知识请参见 Python 正则表达式),每一个子组将作为一个参数,被 views.py 中的对应视图函数接收。
我们再访问 http://127.0.0.1:8000/add/4/5/ 就可以看到和刚才同样的效果,但是这回网址更优雅了
Django views.py urls.py
二、url 中的 name [技能提升]
我们还有刚才的代码,再来看一下 urls.py 中的代码
from django.conf.urls import url
from django.contrib import admin
from calc import views as calc_views
urlpatterns = [
url(r'^add/', calc_views.add, name='add'),
url(r'^add2/(\d+)/(\d+)/$', calc_views.add2, name='add2'),
url(r'^admin/', admin.site.urls),
]
url(r'^add/$', calc_views.add, name='add'), 这里的 name='add' 是用来干什么的呢?
我们在开发的时候,刚开始想用的是 /add/4/5/ ,后来需求发生变化,比如我们又想改成 /4_add_5-/这样的格式,但是我们在网页中,代码中很多地方都写死的是
<a href="/add/4/5/">计算 4+5</a>
这样就导致当我们改了 urls.py 后,对应的模板,甚至还视图中的跳转,以及 models.py 中也可能有获取网址的地方。
每个地方都要改,修改的代价很大,一不小心,有的地方没改过来,那个就不能用了。
那么有没有更优雅的方式来解决这个问题呢?当然答案是肯定的。
我们先说一下如何用 Python 代码获取对应的网址:
我们在终端上输入(推荐安装 bpython, 这样Django会用 bpython的 shell)
python manage.py shell
>>> from django.core.urlresolvers import reverse
>>> reverse('add2', args=(4,5))
u'/add2/4/5/'
>>> reverse('add2', args=(444,555))
u'/add2/444/555/'
reverse 接收 url 中的 name 作为第一个参数,我们在代码中就可以通过 reverse() 来获取对应的网址(这个网址可以用来跳转,也可以用来计算相关页面的地址.),只要对应的 url 的name不改,就不用改代码中的网址。
在网页模板中也是一样,可以很方便的使用。
不带参数的:
{% url 'name' %}
带参数的:参数可以是变量名
{% url 'name' 参数 %}
例如:
<a href="{% url 'add2' 4 5 %}">link</a>
上面的代码渲染成最终的页面是
<a href="/add/4/5/">link</a>
这样就可以通过 {% url 'add2' 4 5 %} 获取到对应的网址 /add/4/5/
当 urls.py 进行更改,前提是不改 name(这个参数设定好后不要轻易改),获取的网址也会动态地跟着变,比如改成:
url(r'^new_add/(\d+)/(\d+)/$', 'calc.views.add2', name='add2'),
注意看重点 add2 变成了 new_add,这时 {% url 'add2' 4 5 %} 就会渲染对应的网址成 /new_add/4/5/, reverse 函数也是一样会获取新的网址,这样改网址时只需要改 urls.py 中的正则表达式(url 参数第一部分),其它地方都“自动”跟着变了,是不是这样更好呢?
如何让/以前的 /add2/3/4/自动跳转到新的网址呢?要知道Django不会帮你做这个,这个需要自己来写一个跳转方法:
具体思路是,在 views.py 写一个跳转的函数:
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
def old_add2_redirect(request, a, b):
return HttpResponseRedirect(
reverse('add2', args=(a, b))
)
urls.py中:
url(r'^add2/(\d+)/(\d+)/$', calc_views.old_add2_redirect),
url(r'^new_add/(\d+)/(\d+)/$', calc_views.add2, name='add2'),
这样,假如用户收藏夹中有 /add2/4/5/ ,访问时就会跳转到新的 /new_add/4/5/ 了
开始可能觉得直接写网址简单,但是用多了你一定会发现,用“死网址”的方法很糟糕。
源代码下载:
zqxt_views(django 1.4 - django 1.9).zip [更新于 2015-12-22 21:23:55]
用Djagno1.9创建,测试代码可以在 Djagno 1.4 - Django 1.9 中正常运行
其它下载:
zqxt_views.zip(以�0�的旧示例代码下载)
« Django 视图与网址
Django 模板 »
被顶起来的评论
zzqand
zzqand
Chrome 31.0.1650.63
Windows 7
本章最后面关于name的这部分没看明白,希望老师再深入讲一下
2015年7月20日回复顶(6)转发
涂伟忠
涂伟忠博主
Chrome 49.0.2623.87
Mac OS X
回复 昔我往矣: 自己在百度或谷歌上搜索“多说评论显示 useragent”
3月15日回复顶(1)转发
潇洒王子
潇洒王子
QQ浏览器 9.1.4060.400
Windows 7
回复 涂伟忠: 没有搞混,我是 c = int(a) + int(b);它就是不认识,还有HttpResponse(str(c)),这个str它也是undefined variable str;还有后面的map(str,range(100)),也是undefined str,map;我在想我是不是没有引用什么导致的。我在普通的Python项目中是正确的,在DJango中就不正确
2015年12月31日回复顶(1)转发
社交帐号登录:
微博
QQ
�1��人
豆瓣
更多»
最新最早最热
78条评论
昔我往矣
昔我往矣
Mozilla FireFox 45.0
Windows 10
另外,有事相求,老师你这个回复的UserAgent提取有什么插件么,可否分享下?berlinsaint@126.com
3月15日回复顶转发
涂伟忠
涂伟忠博主
Chrome 49.0.2623.87
Mac OS X
自己在百度或谷歌上搜索“多说评论显示 useragent”
3月15日回复顶(1)转发
昔我往矣
昔我往矣
Mozilla FireFox 45.0
Windows 10
最后,支持一下楼主
3月15日回复顶转发
XHOU
XHOU
Chrome 48.0.2564.116
Mac OS X
add2的访问网址应该是:http://127.0.0.1:8000/add2/4/5/吧?
3月12日回复顶转发
暴雪
暴雪
2345王牌浏览器
Windows 10
SyntaxError at /add/
Non-ASCII character '\xe6' in file /opt/ProjectB/ProjectB/urls.py on line 210, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details (urls.py, line 10)Request Method: GET
Request URL: http://172.16.0.68:44333/add/?a=4&b=5
Django Version: 1.6.11
Exception Type: SyntaxError
为什么每次views.py 要在前面生明字符集-*- coding: utf-8 -*-。其它需要改动的python脚本 不需要生明呢。
3月1日回复顶转发
涂伟忠
涂伟忠博主
Chrome 48.0.2564.116
Mac OS X
里面有中文的时候就要声明,没有的话可有可没有
3月1日回复顶转发
神马就是神马
神马就是神马
Chrome 31.0.1650.63
Windows 7
有一个小错误,
url(r'^add2/(\d+)/(\d+)/$', calc_views.add2, name='add2'),
调用方法应该是
http://127.0.0.1:8000/add2/4/5/
[神马]
2月23日回复顶转发
Neal_找三毛
Neal_找三毛
Mozilla FireFox 44.0
Windows 7
>>> from django3.core.urlresolvers import reverse
>>> reverse('add2', args=(4,5))
做到这里之后,出现File后面一串 一列,最后说 ViewDoesNotExist:。。。。。。
请教一下是哪里出了问题?
2月15日回复顶转发
涂伟忠
涂伟忠博主
Chrome 48.0.2564.109
Mac OS X
urls.py 中必须有一个 name 为 add2 的
2月16日回复顶转发
潇洒王子
潇洒王子
QQ浏览器 9.1.4060.400
Windows 7
涂老师,我这里c = (int)a + int(b)报错int :undefined variable 还有 return HttpResponse(str(c)) 也报错,undefined variable str...我用的是eclipse,Python版本是1.8
2015年12月31日回复顶(1)转发
涂伟忠
涂伟忠博主
Chrome 45.0.2454.101
Mac OS X
你把语言的语法混了,Python 是 int(a) 这样写的,不是 Java 里面的 (int) a
2015年12月31日回复顶转发
潇洒王子
4 潇洒王子
QQ浏览器 9.1.4060.400
Windows 7
没有搞混,我是 c = int(a) + int(b);它就是不认识,还有HttpResponse(str(c)),这个str它也是undefined variable str;还有后面的map(str,range(100)),也是undefined str,map;我在想我是不是没有引用什么导致的。我在普通的Python项目中是正确的,在DJango中就不正确
2015年12月31日回复顶(1)转发
Any
Any
Apple Safari 601.2.7
Mac OS X
装的django1.9
urlpatterns = [
url(r'^add/$', calc.views.add, name = 'add'),
url(r'^admin/', admin.site.urls),
]
卡在这一步里,如果将calc.views.add加引号,则能运行;
但接下来
urlpatterns = [
url(r'^add2/(\d+)/(\d+)/$', 'calc_views.add2', name ='add2'),
url(r'^add/$', 'calc.views.add', name = 'add'),
url(r'^admin/', admin.site.urls),
]
运行后,提示:
Using the URLconf defined in zqxt_5views.urls, Django tried these URL patterns, in this order:
^add2/(\d+)/(\d+)/$ [name='add2']
^add/$ [name='add']
^admin/
The current URL, add/4/5/, didn't match any of these.
忘博主指点。
2015年12月27日回复顶转发
涂伟忠
涂伟忠博主
Chrome 47.0.2526.106
Mac OS X
Django 1.9 让先引入再使用,其实加引号能用,是Django帮你引入的,你访问 /add/4/5/ 与你自己的 urls.py 中的都不匹配,所以报错(404)
2015年12月27日回复顶转发
Any
Any
Apple Safari 601.2.7
Mac OS X
下载了涂老师的代码,运行了下,没有问题,calc_views.add确实没加引号。
而我照着输入的程序,运行python manage.py rumserver后就提示:
File "/Users/any/Django/zqxt_views/zqxt_views/urls.py", line 23, in
url(r'^add/$', calc.views.add, name = 'add'),
NameError: name 'calc' is n6ot defined
将calc_views.add加引号后才可正常运行。
2015年12月27日回复顶转发
涂伟忠
涂伟忠博主
Chrome 47.0.2526.106
Mac OS X
这是因为你没有 import calc,所以不能 calc.views
2015年12月27日回复顶转发
Any
Any
Apple Safari 601.2.7
Mac OS X
回复 涂伟忠: 谢谢涂老师。
仔细对比了我输入的urls.py和下载的urls.py,我写错了:url(r'^add/$', 'calc.views.add', name = 'add'),首先不应该有$,其次应该是calc_views.add,我写成了calc.views.add.
2015年12月27日回复顶转发
boyxiaolong
boyxiaolong
Apple Safari 601.3.9
Mac OS X
好吧 看了之前的教程没解释name的意义 第一次看到 其实name就是个typedef之类的标识 使得url和view的分离 真的是到处解偶。
2015年12月23日�7�复顶转发
0s_s0
0s_s0
Mozilla FireFox 42.0
Ubuntu
最后的内容没看懂啊
2015年12月9日回复顶转发
LEWISM_
LEWISM_
Mozilla FireFox 42.0
Ubuntu
执行 reverse('add2',(4,5))后返回如下错误
NoReverseMatch: Reverse for 'add2' with arguments '(4, 5)' and keyword arguments '{}' not found. 0 pattern(s) tried: []
求解?
2015年12月8日回复顶转发
瓜州野渡
瓜州野渡
Chrome 46.0.2490.71
Windows 7
涂老师,我有两个问题:1. 我不知道在url pattern中使用name的作用,尽管你举了一个例子但是我还是不太懂。2.我用的是ipython,from django.core.urlresolvers import reverse后运行reverse("add",(3,4))报错:Reverse for 'add' with arguments '(4, 5)' and keyword arguments '{}' not found. 0 pattern(s) tried: []
2015年11月26日回复顶转发
天堂向左
天堂向左
Chrome 44.0.2403.125
Window8s 10
可能是你urls.py里面没有定义name = 'add'的pattern
2015年11月27日回复顶转发
涂伟忠
涂伟忠博主
Chrome 46.0.2490.80
Mac OS X
对的,自己要在 urls.py 中定义,name的作用就是给某一条 url 取一个名字,这样网址可以变,但是只要名字不变,就可以用名字自动得到相应的网址。
2015年11月28日回复顶转发
李达
李达
Mozilla FireFox 38.0
Linux
回复 涂伟忠: name='add2'是干啥的,妥妥的不懂啊!
1. url(r'^new_add/(\d+)/(\d+)/$', calc_views.add2, name='add2')这句的意思是定义一个形如"new_add/数字/数字"的正则表达式,记为变量add2?
2. 如果输入形如"new_add/数字/数字"的网址,那么后台会调用calc_views.add2函数,返回a+b的数字?
3. 如果1,2成立的话,�9�像name='add2'都没有用到,那既然如此,在1中,我改成name='addXXXX'。结果访问new_add/123/345就出错了
2月18日回复顶转发
涂伟忠
涂伟忠博主
Chrome 48.0.2564.109
Mac OS X
回复 李达: 1. 不是记为变量 add2,不过有点类似,就是给这个 url 取了个名字,可能理解成一个 "url规则的名称“
2. 正确
3. 在模板中是用 1 中取的名字来获取相对的网址,就是用1中的规则名称来实现转换,用这个规则加上两个数字,就得到对应的网址,你修改之后,规则找不到了,就报错了
2月18日回复顶转发
李达
李达
Mozilla FireFox 45.0
Windows 10
回复 涂伟忠: 涂老师威武!
3月12日回复顶转发
  
  
Mozilla FireFox 44.0
Ubuntu
: 你看看是不是views里面的args=()这个等号没写,我报错跟你差不多,就是漏了那个等号
2月4日回复顶转发
jeffkaug
jeffkaug
猎豹安全浏览器
Windows 7
涂老师,reverse ()函数加在代码哪里?
2015年11月6日回复顶转发
天堂向左
天堂向左
Chrome 44.0.2403.125
Windows 10
我加在views.py可以
2015年11月27日回复顶转发
涂伟忠
涂伟忠博主
Chrome 46.0.2490.80
Mac OS X
reverse看你哪儿用了,在 py 文件中都可以调用,比如在 models.py 中可以用来生成相应的页面的网址,在views.py中可以用来跳转到某一个页面,用 reverse 来获取要跳转的网址
2015年11月28日回复顶转发
鸡腿
鸡腿
搜狗浏览器
Windows 7
from django.core.urlresolvers import reverse
运行这句有语法错误呢请�;��
2015年10月24日回复顶转发
鲸鱼存钱罐
鲸鱼存钱罐
Chrome 44.0.2403.157
Windows 7
慢慢学习中。
2015年10月23日回复顶转发
suangke
suangke
搜狗浏览器
Windows 7
在网页上做加减法
在这一课程中,遇到了一点问题,最后研究出结果的是在启动服务器的时候 需要进入到所在项目的目录(zqxt_views/)然后才python manage.py runserver
这时候打开的网址才是正确的。
2015年10月9日回复顶转发
涂伟忠
涂伟忠博主
Chrome 46.0.2490.64
Mac OS X
对的,只有这个目录有 manage.py 啊
2015年10月9日回复顶转发
Mason_____
Mason_____
UCBrowser 5.4.4237.50
Windows 7
老师 我这边A server error occurred. Please contact the administrator.昨天还可以的 还有我手贱把db.sqlite3的打开方式改了 怎么改回来啊
2015年<10月1日回复顶转发
涂伟忠
涂伟忠博主
Chrome 45.0.2454.93
Mac OS X
可是我不知道你是怎么改的啊
2015年10月1日回复顶转发
Mason_____
Mason_____
UCBrowser 5.4.4237.50
Windows 7
老师 能不能加一下您的qq 或者加一下我的qq(281353932) 就是把他的打开方式改成ie浏览器那样 变不回去了
2015年10月1日回复顶转发
Mason_____
Mason_____
UCBrowser 5.4.4237.50
Windows 7
老师 重新来过就可以了
2015年10月1日回复顶转发
眼观六路耳听八方葛强
眼观六路耳听八方葛强
百度浏览器 7.0
Windows 7
老师,我这边在使用reserve('add',args=(4,5))时报错,name 'reserve' is not defined,是因为我没装bpython的缘故么?
2015年9月17日回复顶转发=
涂伟忠
涂伟忠博主
Chrome 45.0.2454.93
Mac OS X
不是的,from django.core.urlresolvers import reverse
2015年9月18日回复顶转发
守候心中的挚爱
守候心中的挚爱
Chrome 44.0.2403.125
Windows 7
很好玩,哈哈 [嘻嘻]
2015年8月31日回复顶转发
blackwang
blackwang
Mozilla FireFox 40.0
Linux
涂老师,我在做第一步时,发现不修改
```
url(r'^$', 'calc.views.add', name='add'),
```
时是正常的,但是改成教程中
```
url(r'^add/$', 'calc.views.add', name='add'),
```
反而报错。
请问是什么原因呢?
2015年8月28日回复顶转发
blackwang
blackwang
Mozilla FireFox 40.0
Linux
添加add/不正常
2015年8月28日回复顶转发
涂伟忠
涂伟忠博主
Chrome 44.0.2403.1>25
Mac OS X
请参考源代码,别外访问的网址也变了,成了 http://localhost:8000/add/ 不是原来的 http://localhost:8000/
2015年8月28日回复顶转发
blackwang
blackwang
Mozilla FireFox 40.0
Linux
回复 涂伟忠: 嗯嗯,谢谢涂老师,原来只是网址的问题。
2015年8月29日回复顶转发
tt
tt
Chrome 35.0.1916.153
Windows 7
请问,目录结构是怎么做成html的,不会手动吧
2015年8月26日回复顶转发
涂伟忠
涂伟忠博主
Chrome 44.0.2403.125
Mac OS X
后面有 Django 模板
2015年8月27日回复顶转发
yoke
yoke
Chrome 44.0.2403.155
Windows 8
为什么按你说的,我的不可以呢?
2015年8月21日回复顶转发
涂伟忠
涂伟忠博主
Chrome 44.0.2403.1?25
Mac OS X
如果有问题,可以下载源码学习,也可以说出到底哪里出问题了,我可以协助帮忙解决
2015年8月21日回复顶转发
nailuoGG
nailuoGG
Chrome 44.0.2403.155
Mac OS X
有办法实现https://subdomain.domain.com形式的主页么。同时需要获取subdomain作为参数
2015年8月19日回复顶转发
涂伟忠
涂伟忠博主
Chrome 44.0.2403.125
Mac OS X
可以的,用request.get_host()可以获取域名,然后你自己再处理
2015年8月19日回复顶转发
亚特鲁鲁兽
亚特鲁鲁兽
Mozilla FireFox 40.0
Windows 10
徐老师,我windows安装了bpython了,但是执行python manage.py shell没有自动使用bpython终端啊?
2015年8月18日回复顶转发
亚特鲁鲁兽
亚特鲁鲁兽
Mozilla FireFox 40.0
Windows 10
额,打错字了�@�是涂老师,抱歉
2015年8月18日回复顶转发
涂伟忠
涂伟忠博主
Chrome 44.0.2403.125
Mac OS X
windows上的bpython好像有些问题
2015年8月18日回复顶转发
賴世鋒_Garfield
賴世鋒_Garfield
Chrome 46.0.2490.86
Windows 10
我的也没有自动使用bpython,求解涂老师。
2015年11月17日回复顶转发
jacket
jacket
Chrome 44.0.2403.89
Windows 8.1
但是,例子中的正则表达式貌似只能支持非负整数的传参,如果传负数就跪了,请问有什么解决方法吗?
2015年8月17日回复顶转发
涂伟忠
涂伟忠博主
Chrome 44.0.2403.125
Mac OS X
修改一下 urls.py,都是用正则捕获相应的内容,比如改成:
url(r'^add/((?:-|\d)+)/((?:-|\d)+)/$', 'calc.views.add2', name='add2'),
A 2015年8月17日回复顶转发
Michael_翔_
Michael_翔_
QQ浏览器 9.0.3100.400
Windows 10
在windows下,命令行“django-admin.py startproject zqxt_views”无法创建project,要"django-admin startproject zqxt_views"
2015年8月14日回复顶转发
涂伟忠
涂伟忠博主
Chrome 44.0.2403.125
Mac OS X
这个是小问题,自己试一下,不行就换另一个,Linux, Windows, Mac OSX有时候不完全一样
2015年8月14日回复顶转发
Roarain
Roarain
Chrome 44.0.2403.125
Windows 7
涂大大,您好,登陆add页面时提示“Using the URLconf defined in zqxt_views.urls, Django tried these URL patterns, in this order:
^admin/
The current URL, add2/4/5, didn't match any of these.”
代码没有问题,为什么admin能出来,add就是报错呢?
2015年8月13日回复顶转发
涂伟忠
涂伟忠博主
ChrBome 44.0.2403.125
Mac OS X
注意看网址,是 /add/4/5/ 我上面的例子中,第二个网址不是 add2 还是 add
2015年8月13日回复顶转发
涂伟忠
涂伟忠博主
Chrome 44.0.2403.125
Mac OS X
不要叫大大,感觉不好,我们一起学习,一起进步,我也是个学生
2015年8月13日回复顶转发
Roarain
Roarain
Chrome 44.0.2403.125
Windows 7
涂老师吧,add和add2都有异常。http://127.0.0.1:8002/add/?a=4&b=5 “Using the URLconf defined in zqxt_views.urls, Django tried these URL patterns, in this order:
^admin/
The current URL, add/, didn't match any of these.”
但是访问http://127.0.0.1:8002/admin/和http://127.0.0.1:8002/时则正常。
应该是还是add 模块有问题。来回找了好几遍,愣是没发现。
2015年8月13日回复�C��转发
涂伟忠
涂伟忠博主
Chrome 44.0.2403.125
Mac OS X
回复 Roarain: 你自己按照教程修改 urls.py 啊,你的 urls.py 中没有:
url(r'^add/$', 'calc.views.add', name='add'),
url(r'^add/(\d+)/(\d+)/$', 'calc.views.add2', name='add2'),
自己加上去,app 的名称是 calc,按教程一步步来不会有这个问题的
2015年8月13日回复顶转发
Roarain
Roarain
Chrome 44.0.2403.125
Windows 7
回复 涂伟忠: 找到问题原因,由于昨晚是第一次搞Django,目录结构有点乱,竟然有3层zqxt_views。修改一个urls.py竟然会同步到不通目录,好诡异,删除后重新做就OK了。
多谢涂老师!
2015年8月14日回复顶转发
lvious
lvious
UCBrowser 5.2.2603.31
Windows 8.1
url(r'^add/(\d+)/(\d+)/$'D, 'calc.views.add2', name='add2'),这里有报错,换为url(r'^add2/(\d+)/(\d+)/$', 'calc.views.add2', name='add2'),结果正确了。
2015年7月27日回复顶转发
111
111
Chrome 43.0.2357.132
Windows 7
为什么startapp之后没有在setting.py中加入该app
2015年7月23日回复顶转发
涂伟忠
涂伟忠博主
Chrome 43.0.2357.134
Mac OS X
这个需要你自己手动加进去
2015年7月28日回复顶转发
zzqand
zzqand
Chrome 31.0.1650.63
Windows 7
本章最后面关于name的这部分没看明白,希望老师再深入讲一下
2015年7月20日回复顶(6)转发
涂伟忠
涂伟忠博主
Chrome 43.0.2357.134
Mac OS X
好的,有时间我会详细补充的
2015年7月21日回复顶转发
pdamirain
pdamirain
Chrome 45.0.2454.85
Windows 10
同没看�E��……
2015年10月15日回复顶转发
yifeihuang
yifeihuang
Chrome 41.0.2272.118
Windows 7
对于 /add/3/4/ 这样的模式匹配,最好是采用命名来获取
比如 用 ^/add/(?P\d+)/(?P\d+)/?$ 来匹配,并精确定位到a和b
2015年4月26日回复顶转发
涂伟忠
涂伟忠博主
Chrome 41.0.2272.118
Mac OS X
这里用的是正则,如果使用 named group 也是可以的 ^/add/(?P(a)\d+)/(?P(b)\d+)/$ 后面的 ?是不必要的,不加如果匹配不到,系统默认是自动会加一个 / 再次尝试
2015年4月26日回复顶转发
yifeihuang
yifeihuang
Chrome 41.0.2272.118
Windows 7
恩,学习了
2015年4月26日回复顶转发
杂事
杂事
UCBrowser 4.1.4627.19
Windows 7
非常不错了
2015年4月15日回复顶转发
201761625
201761625
Chrome 39.0.2171.65
Mac OS X
学到了网址是如何和视图函数对应的啦 [给力]
2015年1月25日回复顶转发
自强学堂订阅号二维码
关注微信,随时查教程,提升自己!
报告错误
打印页面
百度口碑
赞助我们
免责声明
关于我们
自强学堂为提供的内容仅用于学习,测试和培训。实例可能为了更容易理解而简化。我们一直对教程,参考手册,在线实例保持修订,但是我们不能保证所有内容全部正确。通过使用本站进行学习随之而来的风险与本站无关。当使用本站时,代表您已接受了本站的使用条款和隐私条款。自强学堂是以学习和分享知识为目的,对任何法律问题及风险不承担任何责任。版权所有,保留一切权利。
自强学堂是用 Django 技术开发的站点,托管在百度开放云平台
Copyright © 2008-2015 Powered by 自强学堂 All Rights Reserved. 吉ICP备13002477号-1
搜索
#!/usr/bin/env python
import os
import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_blog.settings")
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
"""
Django settings for my_blog project.
Generated by 'django-admin startproject' using Django 1.8.2.
For more information on this file, see
https://docs.djangoproject.com/en/1.8/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/1.8/ref/settings/
"""
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.8/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '4fh#ria=4u7$()z^@h0+kvt=scb2hxn7$s5zzd8e2y)+045%!8'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = (
'bootstrap_admin',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'article',
# 'custom_markdown',
)
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
)
ROOT_URLCONF = 'my_blog.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,"templates").replace('\\',"/")],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_APPLICATION = 'my_blog.wsgi.application'
# Database
# https://docs.djangoproject.com/en/1.8/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
# Internationalization
# https://docs.djangoproject.com/en/1.8/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# TEMPLATE_DIRS = (
# os.path.join(BASE_DIR, 'templates').replace('\\', '/'),
# )
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.8/howto/static-files/
STATIC_URL = '/static/'
#coding=utf-8
"""my_blog URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/1.8/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
Including another URLconf
1. Add an import: from blog import urls as blog_urls
2. Add a URL to urlpatterns: url(r'^blog/', include(blog_urls))
"""
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^$', 'article.views.home', name = 'home'),
url(r'^(?P<id>(\d+))/$', 'article.views.detail', name='detail'),
url(r'^archives/$','article.views.archives',name='archives'),
# url(r'^(?P<tag>(.+))/$', 'article.views.search_tag', name='search_tag'),
url(r'^(?P<tag>(\w+))/$', 'article.views.search_tag', name='search_tag'),
]
"""
WSGI config for my_blog project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/1.8/howto/deployment/wsgi/
"""
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_blog.settings")
application = get_wsgi_application()
{% extends "base.html" %}
{% block content %}
<div class="posts">
{% for post in post_list %}
<section class="post">
<header class="post-header">
<h2 class="post-title"><a href="{% url 'detail' id=post.id %}">{{ post.title }}</a></h2>
<p class="post-meta">
Time: <a class="post-author" href="#">{{ post.date_time |date:'Y /m /d'}}</a> <a class="post-category post-category-js" href="">{{ post.category }}</a>
</p>
</header>
</section>
{% endfor %}
</div><!-- /.blog-post -->
{% endblock %}
<!--base.html-->
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="A layout example that shows off a blog page with a list of posts.">
<title>{% block title %} Andrew Liu Blog {% endblock %}</title>
<link rel="stylesheet" href="http://yui.yahooapis.com/pure/0.5.0/pure-min.css">
<link rel="stylesheet" href="http://yui.yahooapis.com/pure/0.5.0/grids-responsive-min.css">
<link rel="stylesheet" href="http://picturebag.qiniudn.com/blog.css">
<link rel="stylesheet" href="http://picturebag.qiniudn.com/monokai.css">
</head>
<body>
<div id="layout" class="pure-g">
<div class="sidebar pure-u-1 pure-u-md-1-4">
<div class="header">
<h1 class="brand-title"><a href="{% url 'home' %}">Andrew Liu Blog</a></h1>
<h2 class="brand-tagline">雪忆 - Snow Memory</h2>
<nav class="nav">
<ul class="nav-list">
<li class="nav-item">
<a class="button-success pure-button" href="/">主页</a>
</li>
<li class="nav-item">
<a class="button-success pure-button" href="{% url 'archives' %}">归档</a>
</li>
<li class="nav-item">
<a class="pure-button" href="https://github.com/Andrew-liu/my_blog_tutorial">Github</a>
</li>
<li class="nav-item">
<a class="button-error pure-button" href="http://weibo.com/dinosaurliu">Weibo</a>
</li>
<li class="nav-item">
<a class="button-success pure-button" href="/">专题</a>
</li>
<li class="nav-item">
<a class="button-success pure-button" href="/">About Me</a>
</li>
</ul>
</nav>
</div>
</div>
<div class="content pure-u-1 pure-u-md-3-4">
<div>
{% block content %}
{% endblock %}
<div class="footer">
<div class="pure-menu pure-menu-horizontal pure-menu-open">
<ul>
<li><a href="http://andrewliu.tk/about/">About Me</a></li>
<li><a href="http://twitter.com/yuilibrary/">Twitter</a></li>
<li><a href="http://github.com/yahoo/pure/">GitHub</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
<!-- 多说评论框 start -->
<div class="ds-thread" data-thread-key="{{ post.id }}" data-title="{{ post.title }}" data-url="{{ post.get_absolute_url }}"></div>
<!-- 多说评论框 end -->
<!-- 多说公共JS代码 start (一个网页只需插入一次) -->
<script type="text/javascript">
var duoshuoQuery = {short_name:"andrewliu"};
(function() {
var ds = document.createElement('script');
ds.type = 'text/javascript';ds.async = true;
ds.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') + '//static.duoshuo.com/embed.js';
ds.charset = 'UTF-8';
(document.getElementsByTagName('head')[0]
|| document.getElementsByTagName('body')[0]).appendChild(ds);
})();
</script>
<!-- 多说公共JS代码 end -->
<!--home.html-->
{% extends "base.html" %}
{% block content %}
<div class="posts">
{% for post in post_list %}
<section class="post">
<header class="post-header">
<h2 class="post-title"><a href="{% url 'detail' id=post.id %}">{{ post.title }}</a></h2>
<p class="post-meta">
Time: <a class="post-author" href="#">{{ post.date_time |date:'Y /m /d'}}</a> <a class="post-category post-category-js" href="{% url 'search_tag' tag=post.category %}">{{ post.category }}</a>
</p>
</header>
<div class="post-description" >
</div>
<a class="pure-button" href="{% url 'detail' id=post.id %}">Read More >>> </a>
</section>
{% endfor %}
</div><!-- /.blog-post -->
{% endblock %}
{% extends "base.html" %}
{% load custom_markdown %}
{% block content %}
<div class="posts">
<section class="post">
<header class="post-header">
<h2 class="post-title">{{ post.title }}</h2>
<p class="post-meta">
Time: <a class="post-author" href="#">{{ post.date_time|date:'Y /m /d'}}</a> <a class="post-category post-category-js" href="{% url 'search_tag' tag=post.category %}">{{ post.category }}</a>
</p>
</header>
<div class="post-description">
<p>
{{ post.content|custom_markdown }}
</p>
</div>
</section>
{% include "duoshuo.html" %}
</div><!-- /.blog-post -->
{% endblock %}
{% extends "base.html" %}
{% load custom_markdown %}
{% block content %}
<div class="posts">
{% for post in post_list %}
<section class="post">
<header class="post-header">
<h2 class="post-title"><a href="{% url 'detail' id=post.id %}">{{ post.title }}</a></h2>
<p class="post-meta">
Time: <a class="post-author" href="#">{{ post.date_time |date:'Y M d'}}</a> <a class="post-category post-category-js" href="{% url 'search_tag' tag=post.category %}">{{ post.category|title }}</a>
</p>
</header>
<div class="post-description">
<p>
{{ post.content|custom_markdown }}
</p>
</div>
<a class="pure-button" href="{% url 'detail' id=post.id %}">Read More >>> </a>
</section>
{% endfor %}
</div><!-- /.blog-post -->
{% endblock %}
<!--在test.html文件夹下添加-->
<!DOCTYPE html>
<html>
<head>
<title>Just test template</title>
<style>
body {
background-color: white;
}
em {
color: LightSeaGreen;
}
</style>
</head>
<body>
<h1>Hello World!</h1>
<strong></strong>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment