小编Vir*_*liu的帖子

Django 模板:获取嵌套循环的总迭代计数

我在模板中有两个嵌套的 for 循环。我需要获取自父 for 循环开始以来进行的总迭代次数。仅当子 for 迭代时,计数器才需要递增。

例如:

每个循环从 1 到 3(包含)

父循环 - 第一次迭代

子循环 - 第三次迭代

想要的结果:3

父循环 - 第二次迭代

子循环 - 第一次迭代

想要的结果:4

有什么方法可以使用标准 Django 模板标签来做到这一点吗?如果没有,我有什么选择?

django django-templates

6
推荐指数
1
解决办法
6283
查看次数

如何正确地打破Python中的长行?

我该如何打破以下行?该PEP8指引并不能使它我很清楚.

confirmation_message = _('ORDER_CREATED: %(PROPERTY_1)s - %(PROPERTY_2)s - %(PROPERTY_3)s - %(PROPERTY_4)s')  % {'PROPERTY_1': order.lorem, 'PROPERTY_2': order.ipsum, 'PROPERTY_4': order.dolor, 'PROPERTY_5': order.sit}
Run Code Online (Sandbox Code Playgroud)

python

6
推荐指数
2
解决办法
363
查看次数

Facebook解码的signed_request包含文档中未提及的额外数据

我有一个Facebook signed_request,通过订阅该auth.login事件和用户使用Facebook登录按钮登录后收到

我解码后,signed_request我有以下信息:

{'issued_at': 1318492701, 
'code': 'AQCXI5aiyYtYLFNtkYhtKwDhO02lP[truncated]', 
'user_id': '100000xxxxxxxxx', 
'algorithm': 'HMAC-SHA256'}
Run Code Online (Sandbox Code Playgroud)

我在signed_request文档中找不到.这是什么code以及它的用途是什么?

我认为它可能用于获取此线程中所述的授权代码,但同时signed_request我还在登录事件的响应中收到用户的访问令牌.

authentication facebook

5
推荐指数
1
解决办法
1094
查看次数

即使使用dispatch_uid,Post_save也会收到两次一次保存

我在单个文件中有我的模型:

models
\ 
 |__init__.py
 |event.py
 |a_thing.py
 |...
Run Code Online (Sandbox Code Playgroud)

__init__.py我导入每个模型,然后我设置信号处理.

对于Event模型我需要一些post_save处理.

这是截断版本__init__.py:

from django.db.models.signals import post_save
from django.dispatch import receiver

from core.models.event import Event

# Event
@receiver(post_save, sender = Event)
def event_post_save(sender, dispatch_uid = 'nope', **kwargs):
    print kwargs.get('created')
    print '------'
Run Code Online (Sandbox Code Playgroud)

每当我Event通过控制台保存时,post_save打印的信息就会打印一次,但每当我使用管理界面时,它都会被打印两次.这可能是因为我admin.py也在里面导入模型.

有没有解决方法,以便我可以从管理界面保存事件对象,而无需post_save两次触发?

django django-signals django-admin

5
推荐指数
1
解决办法
1620
查看次数

与==的jQuery数组比较?

我有两个jQuery数组initialListnewList.

我首先比较它们:

initialList == newList
Run Code Online (Sandbox Code Playgroud)

这回来了false.

然后我逐个元素地比较:

$.each(initialList, function(idx, element){ console.log(element == newList[idx] )});
Run Code Online (Sandbox Code Playgroud)

每个比较都是true.

因此,如果所有元素都相同,为什么在第一次比较中返回false?

arrays jquery

5
推荐指数
1
解决办法
880
查看次数

更改QCheckBox的复选框位置

我在网格布局中有一个QCheckbox,定义如下:

self.isSubfactorCheckbox = QtGui.QCheckBox('Is &subfactor', self)
Run Code Online (Sandbox Code Playgroud)

默认情况下,该复选框位于"Is subfactor"文本的左侧.我希望将其移至案文右侧.

我试过玩次控制位置,但无济于事.

self.isSubfactorCheckbox.setStyleSheet('QCheckBox::indicator{subcontrol-origin: content; subcontrol-position: top right;}')
Run Code Online (Sandbox Code Playgroud)

这会将复选框向右移动(它仍然在文本的左侧),但它会将文本向右推出窗口的边缘.

这无助于将文本移到右侧:

self.isSubfactorCheckbox.setStyleSheet('QCheckBox::text{subcontrol-origin: content; subcontrol-position: top left; }')
Run Code Online (Sandbox Code Playgroud)

一个解决方案是创建一个QLabel并在其右侧添加复选框,但我没有找到一种方法来在QLabel中加下划线字母,以便用户知道哪个是快捷键.我已经尝试用字母前缀字母和/或将它们包装在<u> </u>标签中.

我仍然只想使用QLabel,但是如何在没有文本被推出的情况下将复选框切换到文本的右侧.

qt pyqt pyqt4 qcheckbox

4
推荐指数
1
解决办法
7340
查看次数

Matplotlib:使用相同的图形绘制多个图形,没有它们重叠

我有一个类用于绘制事物然后将它们保存到文件中.这是它的简化版本:

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt

class Test():
    def __init__(self, x, y, filename):

        fig = plt.figure(1)
        ax = fig.add_subplot(111)

        ax.plot(x, y, 'D', color='red')

        ax.set_xbound(-5,5)
        ax.set_ybound(-5,5)

        plt.savefig('%s.png' % filename)


test1 = Test(1,2, 'test1')
test2 = Test(2,4, 'test2')
Run Code Online (Sandbox Code Playgroud)

结果如下:

TEST1

TEST2

问题是test2图像也有来自test1的点.图表是在循环中动态生成的,因此我无法对图号进行硬编码.

我可以创建一个计数器并将其传递给类构造函数,但我想知道是否有更优雅的方法来执行此操作.我尝试删除test1对象,但没有做任何事情.

python matplotlib

3
推荐指数
1
解决办法
9295
查看次数

对request.user使用代理类而不是User

我有一个Django User模型的元类,我用它来添加额外的方法(过度简化的版本):

# project.models.pie_lover.py

from django.contrib.auth.models import User

class PieLover(User):
    class Meta:
        app_label = "core"
        proxy = True

    def likes_pie(self):
        return True
Run Code Online (Sandbox Code Playgroud)

在我看来,我希望登录PieLover,看看他是否喜欢馅饼(愚蠢的事情要做,因为PieLover总是喜欢馅饼,但在现实世界的情况下,情况可能不是这样).我的问题在于Django登录用户的方式,我使用内置login(request)函数,因此存储的对象request.user是一个User对象,而不是PieLover.

# project.views.like_pie.py

from ..models.pie_lover import PieLover

def index(request):
    pie_lover = request.user

    if pie_lover.likes_pie():
        print "Try pie, try!"
    else:
        print "BLASPHEMER!"
Run Code Online (Sandbox Code Playgroud)

如果我尝试这样做,Django告诉我该User对象没有likes_pie预期的方法,因为request.user它不是一个PieLover实例.

作为一个快速的解决方法,我只是得到PieLover与其相同的ID,User但这意味着额外的数据库命中.

如何PieLover在请求中默认使用Django ?我在想,而不是进行另一个数据库查询来获取正确的PieLover对象来创建一个新PieLover对象并request.user在初始化时传递给它,但我不知道这是什么意思.

django django-models

1
推荐指数
1
解决办法
654
查看次数

定制小部件的自定义验证

我有以下模型(简化):

class Location(models.Model):
    name = models.CharField(max_length=100)
    is_ok = models.BooleanField()

class Profile(models.Model):
    name = models.CharField(max_length=100)
    location = models.ForeignKey(Location)

class AnotherThing(models.Model):
    name = models.CharField(max_length=100)
    location = models.ForeignKey(Location)
Run Code Online (Sandbox Code Playgroud)

我使用的ModelForm允许用户添加/编辑ProfileAnotherThing项目数据库.简化版:

class ProfileForm(ModelForm):
    class Meta:
        model = Profile
        widgets = {'location': CustomLocationWidget()}

class AnotherThingForm(ModelForm):
    class Meta:
        model = Profile
        widgets = {'location': CustomLocationWidget()}
Run Code Online (Sandbox Code Playgroud)

简化的代码CustomLocationWidget是这样的:

class CustomLocationWidget(Input):
    def __init__(self, *args, **kwargs):
        super(CustomLocationWidget, self).__init__(*args, **kwargs)

    def render(self, name, value, attrs = None):
        output = super(CustomLocationWidget).render(name, value, attrs)
        output += 'Hello there!' …
Run Code Online (Sandbox Code Playgroud)

django django-forms

1
推荐指数
1
解决办法
1477
查看次数