请教各位高手Django的url配置问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教各位高手Django的url配置问题相关的知识,希望对你有一定的参考价值。
参考技术A 流线型化(streamlinling)函数导入1:直接导入视图函数
from django.conf.urls.defaults import *
from mysite.views import hello
urlpatterns = patterns('',
(r'^hello/$', hello),
(r'^time/$', time),
)
2:导入包函模块名和函数的客串,而不是函数本身
from django.conf.urls.defaults import *
from mysite import views
urlpatterns = patterns('',
(r'^hello/$', 'views.hello'),
(r'^time/$', 'views.time'),
)
3:不用导入任何视图内容,写清楚字符串描述
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^hello/$', 'mysite.views.hello'),
(r'^time/$', 'mysite.views.time'),
)
4:提取一个公共视图前缀
from django.conf.urls.defaults import *
urlpatterns = patterns('mysite.views',
(r'^hello/$', 'hello'),
(r'^time/$', 'time'),
)
5:partterns()返回对对象的相加
旧:
from django.conf.urls.defaults import *
urlpatterns = patterns('mysite.view',
(r'^hello/$', 'hello'),
(r'^time/$', 'time'),
(r'^other/$', 'mysite.others.other'),
)
新:
from django.conf.urls.defaults import *
urlpatterns = patterns('mysite.view',
(r'^hello/$', 'hello'),
(r'^time/$', 'time'),
)
urlpatterns += patterns('mysite.others',
(r'^other/$', 'other'),
)
6:到目前为止,在所有URLconf例子中,我们使用的很简单,即“无命名”正则表达式组,在我们
想要捕获的URL部分加上小括号,django会将捕获的文本作为位置参数传递给视图函数。在更
高级的用法中,还可以使用“命名”正则表达式组来捕获URL,并且将其作为“关键字”参数 传给视图。
在python正则表达式中,命名的正则表达式组的语法是(?p<name>pattern),这里name是组的名字,而pattern是匹配的某个模式。
下面是一个使用无名组的URLconf的例子:
from django.conf.urls.defaults import *
from mysite import views
urlpatterns = patterns('',
(r'^arcticles/(\d4)/$',views.year_archive),
(r'^arcticles/(\d4)/(\d2)/$', view.moth_archive),
)
下面是相同的URLconf,使用命名组进行了重写:
from django.conf.urls.defaults import *
from mysite import views
urlpatterns = patterns('',
(r'^arcticles/(?P<year>\d4)/$', veiws.year_archive),
(r'^arcticles/(?P<year>\d4)/(?P<month>\d2)/$', veiws.month_archive),
)
如果不带命名组,请求/arcticle/2006/03/将会等于这样的函数调用:
month_archive(request, '2006', '03')
而带命名组,同样的请求就是这样的函数调用:
month_archive(request, year='2006', month='03')
从中可以看出,使用命名组可以让你的URLconf更加清晰,减少参数次序可能搞混潜在的Bug,
还可以让你的定义中对参数重新排序。
7:视图冗余:
# urls.py
from django.conf.urls.defaults import *
from mysite import views
urlpatterns = patterns('',
(r'^(foo)/$', views.foobar_view),
(r'^(bar)/$', views.foobar_view),
)
# views.py
from django.shortcuts import render_to_response
from mysite.models import MyModel
def foobar_view(request, url):
m_list = MyModel.objects.filter(is_new=True)
if url == 'foo':
template_name = 'template1.html'
elif url == 'bar':
template_name = 'template2.html'
return render_to_response(template_name, 'm_list': m_list)
利用上面的方法可以减少视图冗余
8:为url里传入固定的参数:
# urls.py
from django.conf.urls.defaults import *
from mysite import views
urlpatterns = patterns('',
(r'^foo/$', views.foobar_view, 'template_name': 'template1.html'),
(r'^bar/$', views.foobar_view, 'template_name': 'template2.html'),
)
# views.py
from django.shortcuts import render_to_response
from mysite.models import MyModel
def foobar_view(request, template_name):
m_list = MyModel.objects.filter(is_new=True)
return render_to_response(template_name, 'm_list': m_list)
一些URL参数详解:
/mydata/jan/01/
/mydata/jan/02/
/mydata/jan/03/
以上为三个url我们可以用不同的方式实现
1: (r'^mydata/(/w3)/(/d/d)', views.mydata) mydata(request, 'jan', '01')
2: (r'^mydata/(?P<month>/w3)/(?P<day>/d/d)', view.mydata) mydata(request, month='jan', day='01')
3: (r'^mydata/birthday/$', views.mydata, month:'jan', day:'01') mydata(request, month='jan', day='01')
9:include导入:
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^weblog/', include('mysite.blog.urls')),
(r'^photos/', include('mysite.photos.urls')),
(r'^about/$', 'mysite.views.about'),
)
10:实例:
验证用户是否登录:
以下是三个视图
def my_view1(request):
if not request.user.is_authenticated():
return HttpResponseRedirect('/accounts/login/')
# ...
return render_to_response('template1.html')
def my_view2(request):
if not request.user.is_authenticated():
return HttpResponseRedirect('/accounts/login/')
# ...
return render_to_response('template2.html')
def my_view3(request):
if not request.user.is_authenticated():
return HttpResponseRedirect('/accounts/login/')
# ...
return render_to_response('template3.html')
以下是对视图进行包装:
def requires_login(view):
def new_view(request, *args, **kwargs):
if not request.user.is_authenticated(): #如果用户没有登录,跳转到登录界面
return HttpResponseRedirect('/accounts/login/')
return view(request, *args, **kwargs) #否则返回传进来的方法
return new_view #返回new_view值:登录视图或者是传进来的视图
以下为URL配置:
from django.conf.urls.defaults import *
from mysite.views import requires_login, my_view1, my_view2, my_view3
urlpatterns = patterns('',
(r'^view1/$', requires_login(my_view1)),
(r'^view2/$', requires_login(my_view2)),
(r'^view3/$', requires_login(my_view3)),
)
Delphi的高手请进,请教一个关于窗体创建的问题!
我在一个窗体放了大量的控件并且用了VCLSKIN,因此窗体在第一次SHOW的时候会出现一个从Delphi最原始的风格到所使用的皮肤的渐变的过程,不爽。因此我将窗体的宽高设为0再SHOW再Hide,再还原窗体大小,在SHOW。这个蠢办法是把问题解决了,可各位大侠可有什么更好的方法呢,希望不吝赐教啊!
我已经加入了 加载窗体
可是如何在加载窗体中 实现主窗体的show 而且还悄悄的进行
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, SkinCaption, WinSkinStore, WinSkinData, SpTBXControls,
SpTBXItem, TntStdCtrls, StdCtrls, TntMenus, TBXDkPanels, Menus, TB2Item,
TBXSwitcher, TBX, TB2Dock, TB2Toolbar, ComCtrls, ToolWin, ExtCtrls,
Grids, Mask, Buttons;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Label1: TLabel;
ListBox1: TListBox;
ComboBox1: TComboBox;
RadioGroup1: TRadioGroup;
SpeedButton1: TSpeedButton;
MaskEdit1: TMaskEdit;
StringGrid1: TStringGrid;
Image1: TImage;
ScrollBox1: TScrollBox;
ControlBar1: TControlBar;
StaticText1: TStaticText;
ColorBox1: TColorBox;
RichEdit1: TRichEdit;
ListView1: TListView;
ToolBar1: TToolBar;
StatusBar1: TStatusBar;
TBXDockablePanel1: TTBXDockablePanel;
TBXToolbar1: TTBXToolbar;
TBXMultiDock1: TTBXMultiDock;
TBXDock1: TTBXDock;
TBXSwitcher1: TTBXSwitcher;
TBPopupMenu1: TTBPopupMenu;
TBXButton1: TTBXButton;
TntGroupBox1: TTntGroupBox;
TntEdit1: TTntEdit;
TntPopupMenu1: TTntPopupMenu;
TntMemo1: TTntMemo;
TntCheckBox1: TTntCheckBox;
TntListBox1: TTntListBox;
SpTBXToolbar1: TSpTBXToolbar;
SpTBXSpeedButton1: TSpTBXSpeedButton;
SpTBXButton1: TSpTBXButton;
SkinData1: TSkinData;
SkinStore1: TSkinStore;
SkinCaption1: TSkinCaption;
procedure FormCreate(Sender: TObject);
procedure SkinData1AfterSkinForm(Sender: TObject; ahwnd: HWND;
aName: String);
private
Private declarations
public
Public declarations
end;
var
Form1: TForm1;
implementation
$R *.dfm
procedure TForm1.FormCreate(Sender: TObject);
begin
form1.AlphaBlend:=true;
form1.AlphaBlendValue:=0;
end;
procedure TForm1.SkinData1AfterSkinForm(Sender: TObject; ahwnd: HWND;
aName: String);
begin
form1.AlphaBlend:=false;
form1.AlphaBlendValue:=255;
end;
end. 参考技术A 君不见众软件打开的时候都喜欢一个欢迎界面?
加它的理由很简单
1.版权
2.美观
3.暗地里把事情忙完了(加载组件,皮肤等初始化参数) 参考技术B 嘿嘿,仔细考虑了下
你这个还是不错的方法
嘿嘿
以上是关于请教各位高手Django的url配置问题的主要内容,如果未能解决你的问题,请参考以下文章
客户端的SoftEther连接不上!!!请教各位SoftEther高手!
客户端的SoftEther连接不上!!!请教各位SoftEther高手!