当我尝试遵循与Python编码相关的Python Wiki示例时:
>>> import urllib
>>> params = urllib.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})
>>> f = urllib.urlopen("http://www.musi-cal.com/cgi-bin/query", params)
>>> print f.read()
Run Code Online (Sandbox Code Playgroud)
第二行引发错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'urlencode'
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
我的代码在myapp_extras.py中:
from django import template
register = template.Library()
@register.inclusion_tag('new/userinfo.html')
def address():
address = request.session['address']
return {'address':address}
Run Code Online (Sandbox Code Playgroud)
在'settings.py'中:
TEMPLATE_CONTEXT_PROCESSORS =(
"django.core.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
'django.core.context_processors.request'
)
Run Code Online (Sandbox Code Playgroud)
但是我收到一个错误:
TemplateSyntaxError at /items/
Caught an exception while rendering: global name 'request' is not defined
Original Traceback (most recent call last):
File "C:\Python25\lib\site-packages\django\template\debug.py", line 71, in render_node
result = node.render(context)
File "C:\Python25\lib\site-packages\django\template\__init__.py", line 915, in render
dict = func(*args)
File "C:\p4\projects\myproject\..\myproject\invoice\templatetags\myapp_extras.py", line 9, in address
address = request.session['address']
NameError: global name 'request' is not defined …Run Code Online (Sandbox Code Playgroud) 我有一个过滤器,其中包含汽车品牌和型号的相关下拉列表。由于我不想在一页上显示所有内容,因此我添加了分页器。问题是过滤器工作正常,但无法在页面中保留
当过滤器处于活动状态时,网址看起来像
/cars/?manufacture=2&model=2
如果我转到下一页,我得到的只是/cars/?page=2
我想要类似的东西/cars/?manufacture=2&model=2?page=2
如果我打印{{ posts|length }}它确实会返回正在过滤的正确数量的项目,因此那里没有问题
我认为问题出在模板中的下一个和上一个按钮,因为它们不会传递下一页以外的任何参数。我如何将过滤器带入分页器。
看法
def allCarsView(request):
model = Post
myFilter = carFilter(request.GET, queryset=Post.objects.all())
posts = myFilter.qs
page = request.GET.get('page', 1)
paginator = Paginator(posts.order_by('date_posted'), 2)
page_obj = paginator.get_page(page)
page_range = paginator.get_elided_page_range(number=page)
context = {
'posts':posts, 'myFilter':myFilter, 'page_range': page_range,
'page': page, 'paginator': paginator, 'page_obj': page_obj
}
return render(request, 'blog/cars.html', context)
Run Code Online (Sandbox Code Playgroud)
html 分页器
<nav aria-label="Page navigation example " class="paginator">
<nav aria-label="Page navigation example " class="paginator">
<ul class="pagination justify-content-center">
<li class="page-item">
{% if page_obj.has_previous …Run Code Online (Sandbox Code Playgroud) 我想为我的管理面板实现自定义分页。
我的网址如下所示:
http://localhost:8000/admin/items/?group_id=20
group_id在此 URL 上,我做了一些工作来使用参数(通过覆盖方法)过滤结果get_changelist。
页面结果是正确的,问题是我的分页结果是这样的http://localhost:8000/admin/items/?p=1,而我希望 URL 是这样的http://localhost:8000/admin/items/?group_id=20&p=1并保留参数。
基本上我想要与How to paginate Django with other getvariables?相同的结果。但使用 Django 管理。
如何将参数与分页一起保留?
我尝试过覆盖 pagination.html 文件,但没有成功。
谢谢。
编辑
我尝试过覆盖 pagination.html 但request.GET.items仍然是空的(即使我的设置文件配置良好)
{% load admin_list %}
{% load i18n %}
{% load content_extras %}
<p class="paginator">
{% if pagination_required %}
{% for i in page_range %}
<a href="?p={{ i }}{% for key, value in request.GET.items %}{% if key != 'p' %}&{{ key }}={{ value }}{% …Run Code Online (Sandbox Code Playgroud) django django-templates django-models django-admin django-rest-framework
我正在使用 Django Paginator,并且希望有多个可用的获取参数,例如: page=1 sort_by=price
但是,在我的模板标签中,我有:
Showing items sorted by {{ SORT_PARAM }}.
Showing {{ ITEMS_PER_PAGE }} items per page.
{% if has_prev %}
<a href="?page={{ prev_page }}">Previous</a> |
{% endif %}
Run Code Online (Sandbox Code Playgroud)
但是,这不会保留其他 GET 变量。我的意思是,如果我正在观看
page/?page=1&sort_by=price
Run Code Online (Sandbox Code Playgroud)
我单击上面模板片段中的链接,我将转到
page=2
Run Code Online (Sandbox Code Playgroud)
代替
page=2&sort_by=price
Run Code Online (Sandbox Code Playgroud)
我的意思是,a href 不保留其他 GET 参数。
一种解决方案是我可以在 a href 中键入所有可能的 GET 参数,例如
<a href="?page={{ prev_page }}&items_per_page={{ ITEMS_PER_PAGE }}&sort_param={{ SORT_PARAM }}">Previous</a>
Run Code Online (Sandbox Code Playgroud)
但我想在浏览中添加的参数越多,这将变得越难扩展。我猜应该有一种自动化的方法来获取所有 GET 参数,然后传递这些参数和更多参数?