如何使用Django 1.3分页?
文档对此不是很清楚.
怎么回事views.py?
什么到我的模板?
什么到我的URLconf文件?
我不清楚在Django 1.5中如何最好地访问基于类的视图中的URL参数.
考虑以下:
视图:
from django.views.generic.base import TemplateView
class Yearly(TemplateView):
template_name = "calendars/yearly.html"
current_year = datetime.datetime.now().year
current_month = datetime.datetime.now().month
def get_context_data(self, **kwargs):
context = super(Yearly, self).get_context_data(**kwargs)
context['current_year'] = self.current_year
context['current_month'] = self.current_month
return context
Run Code Online (Sandbox Code Playgroud)
URL配置:
from .views import Yearly
urlpatterns = patterns('',
url(
regex=r'^(?P<year>\d+)/$',
view=Yearly.as_view(),
name='yearly-view'
),
)
Run Code Online (Sandbox Code Playgroud)
我想year在我的视图中访问参数,所以我可以像以下那样执行逻辑:
month_names = [
"January", "February", "March", "April",
"May", "June", "July", "August",
"September", "October", "November", "December"
]
for month, month_name in enumerate(month_names, start=1):
is_current = False
if year == current_year …Run Code Online (Sandbox Code Playgroud) 主视图是一个简单的分页ListView,我想添加一个搜索表单.
我认为这样的事情可以解决问题:
class MyListView(ListView, FormView):
form_class = MySearchForm
success_url = 'my-sucess-url'
model = MyModel
# ...
Run Code Online (Sandbox Code Playgroud)
但显然我弄错了......我在官方文档中找不到如何做到这一点.
建议?
我试图实现一个Class Based ListView显示选择的表集.如果第一次请求站点,则应显示数据集.我更喜欢POST提交,但GET也没关系.
这是一个容易处理的问题,function based views但是基于类的视图我很难理解.
我的问题是我得到了各种错误,这是由于我对基于分类的观点的理解有限.我已阅读各种文档,我理解直接查询请求的视图,但只要我想在查询语句中添加一个表单,我就遇到了不同的错误.对于下面的代码,我会收到一个ValueError: Cannot use None as a query value.
根据表单条目(否则选择整个数据库),基于类的ListView的最佳实践工作流程是什么?
这是我的示例代码:
models.py
class Profile(models.Model):
name = models.CharField(_('Name'), max_length=255)
def __unicode__(self):
return '%name' % {'name': self.name}
@staticmethod
def get_queryset(params):
date_created = params.get('date_created')
keyword = params.get('keyword')
qset = Q(pk__gt = 0)
if keyword:
qset &= Q(title__icontains = keyword)
if date_created:
qset &= Q(date_created__gte = date_created)
return qset
Run Code Online (Sandbox Code Playgroud)
forms.py
class ProfileSearchForm(forms.Form):
name = forms.CharField(required=False)
Run Code Online (Sandbox Code Playgroud)
views.py
class ProfileList(ListView):
model = Profile
form_class = …Run Code Online (Sandbox Code Playgroud) forms django listview django-class-based-views class-based-views
我有一个QuestionView派生自FormView班级的班级.这是一个代码片段来解释我的问题:
class QuestionView(FormView):
...
context_var1 = y
def form_valid (self, form):
...
self.context_var1 = x
...
def get_context_data(self, **kwargs):
...
context['context_var1'] = self.context_var1
...
return context
Run Code Online (Sandbox Code Playgroud)
如上所示,我更新了一组上下文变量form_valid,我打算在模板中使用这些变量的值 - 因此是context字典中的变量.这段代码的问题context_var1在于没有看到更改
- 可能是因为get_context_data在form_valid方法之前调用了.这有解决方法吗?
据我所知,在自定义方法中访问命名 url 参数的标准方法get_context_data()是通过self.kwargs.
然而,self.kwargs语法变得很尴尬,尤其是在处理大量参数时。因此,我一直在每个方法的顶部采用类似的方法get_context_data()——只是为了获得易于处理的局部变量:
def get_context_data(self, **kwargs):
var1, var2, var3, var4, var5 = [self.kwargs[x] for x in ['var1', 'var2', 'var3', 'var4', 'var5']]
# do stuff with var1, var2, ...
# instead of self.kwargs['var1'], self.kwargs['var2'], ...
Run Code Online (Sandbox Code Playgroud)
这是丑陋且痛苦的,但它最终使事情变得更容易使用和阅读。
有没有一种简单的方法来清理它并将命名参数放入局部变量中?缺少重写get()方法、子类化 Django 的通用视图等?我怀疑我在这里错过了一些非常基本的、基本的 python 概念。
以下是调用的默认get()方法,get_context_data()以防在此处引用有帮助:
def get(self, request, *args, **kwargs):
context = self.get_context_data(**kwargs)
return self.render_to_response(context)
Run Code Online (Sandbox Code Playgroud)
更新:
我的错误,调用get()方法实际上如下(FormView在这种情况下泛型正在被子类化)。不幸的是,传入的 kwargsget_context_data()与以下不同self.kwargs:
def get(self, request, …Run Code Online (Sandbox Code Playgroud)