我在使用django-crispy-forms时遇到了一个问题,我无法得到答案.我有一个相当复杂的表单布局,到目前为止,一切都非常好用cripy-forms.
表单的一部分使用通用内联formset.这也是有效的,但我的问题是,我无法弄清楚如何访问delete-checkbox(当can_delete = True时)
相应的代码类似于:
class BaseReleaseReleationFormSet(BaseGenericInlineFormSet):
def __init__(self, *args, **kwargs):
self.instance = kwargs['instance']
super(BaseReleaseReleationFormSet, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_id = "id_relation_form"
self.helper.form_class = 'form-horizontal'
self.helper.form_method = 'post'
self.helper.form_action = ''
self.helper.form_tag = False
base_layout = Row(
Column(
Field('name', css_class='input-small'),
#Field('delete', css_class='input-small'),
css_class='span3'
),
Column(
Field('url', css_class='input-xlarge'),
css_class='span4'
),
css_class='row relation-row',
)
self.helper.add_layout(base_layout)
Run Code Online (Sandbox Code Playgroud)
name和url字段根据需要使用crispy-forms呈现,但delete-checkbox显示在表单的末尾.我无法在布局中访问它.
有人知道如何解决这个问题吗?有小费吗?提前致谢!
我坚持解码/解析用PIL提取的ICC配置文件信息.
在包含"Adobe RGB(1998)"配置文件的测试图像下方.
# download the test image:
wget http://i.stack.imgur.com/62AHB.jpg
Run Code Online (Sandbox Code Playgroud)
-
from PIL import Image
path = '62AHB.jpg'
icc = Image.open(path).info.get('icc_profile')
Run Code Online (Sandbox Code Playgroud)
到目前为止一直很好 - 但我找不到处理返回的ICC信息的方法.
上面的例子将返回:
'\x00\x00\x020ADBE\x02\x10\x00\x00mntrRGB XYZ\x07\xcf\x00\x06\x00\x03\x00\x00\x00\x00\x00\x00acspAPPL\x00\x00\x00\x00none\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\xf6\xd6\x00\x01\x00\x00\x00\x00\xd3-ADBE\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ncprt\x00\x00\x00\xfc\x00\x00\x002desc\x00\x00\x010\x00\x00\x00kwtpt\x00\x00\x01\x9c\x00\x00\x00\x14bkpt\x00\x00\x01\xb0\x00\x00\x00\x14rTRC\x00\x00\x01\xc4\x00\x00\x00\x0egTRC\x00\x00\x01\xd4\x00\x00\x00\x0ebTRC\x00\x00\x01\xe4\x00\x00\x00\x0erXYZ\x00\x00\x01\xf4\x00\x00\x00\x14gXYZ\x00\x00\x02\x08\x00\x00\x00\x14bXYZ\x00\x00\x02\x1c\x00\x00\x00\x14text\x00\x00\x00\x00Copyright 1999 Adobe Systems Incorporated\x00\x00\x00desc\x00\x00\x00\x00\x00\x00\x00\x11Adobe RGB (1998)\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00XYZ \x00\x00\x00\x00\x00\x00\xf3Q\x00\x01\x00\x00\x00\x01\x16\xccXYZ \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00curv\x00\x00\x00\x00\x00\x00\x00\x01\x023\x00\x00curv\x00\x00\x00\x00\x00\x00\x00\x01\x023\x00\x00curv\x00\x00\x00\x00\x00\x00\x00\x01\x023\x00\x00XYZ \x00\x00\x00\x00\x00\x00\x9c\x18\x00\x00O\xa5\x00\x00\x04\xfcXYZ \x00\x00\x00\x00\x00\x004\x8d\x00\x00\xa0,\x00\x00\x0f\x95XYZ \x00\x00\x00\x00\x00\x00&1\x00\x00\x10/\x00\x00\xbe\x9c'
Run Code Online (Sandbox Code Playgroud)
如何解码这些信息?
数据中似乎有一些键.在这种情况下,我基本上只需要"desc"的值,即 "Adobe RGB(1998)".
有任何想法吗?期待您的投入:)!
有人有一个很好的提示如何将PHP函数移植到python?
/**
* converts id (media id) to the corresponding folder in the data-storage
* eg: default mp3 file with id 120105 is stored in
* /(storage root)/12/105/default.mp3
* if absolute paths are needed give path for $base
*/
public static function id_to_location($id, $base = FALSE)
{
$idl = sprintf("%012s",$id);
return $base . (int)substr ($idl,0,4) . '/'. (int)substr($idl,4,4) . '/' . (int)substr ($idl,8,4);
}
Run Code Online (Sandbox Code Playgroud) 我找不到解码从 3D-Secure ACS 服务回发的信息 (PaRes) 的方法。
有人知道如何解压缩/解码这个字符串吗?
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
Run Code Online (Sandbox Code Playgroud)
我在某处读到它可以是 base64 编码的 - 但我不知道如何使用 python 解码它。它最终也会被压缩吗?
欢迎任何输入!
我有关于正则表达式/ Python的问题.很抱歉,如果这个主题已被讨论了数百万次 - 通常我会在so/google等上找到答案但是我被这个问题困在数百万的答案中......(说实话 - 我拥有一本正则表达式的书,但不知何故我太傻了,真的不明白......)
对于音乐管理系统,我需要从路径中提取信息,提供不同的选项集.这里有两个例子:
"/The Prodigy/The Fat Of The Land/04 - Funky Stuff.flac"
Run Code Online (Sandbox Code Playgroud)
它应该提取:
"/[XLR 483] The Fat Of The Land/04 - The Prodigy - The Funky Stuff.flac"
Run Code Online (Sandbox Code Playgroud)
应提取:
不需要涵盖两种情况的正则表达式,这只是两个例子.然后我将它们作为选项提供(或者添加自己的选项).
任何帮助将不胜感激!
@ S.Lott:我没有这方面的正则表达式,我开始分割字符串:
parts = rel_path.split('/')
track = parts[-1]
release = parts[-2]
artist = parts[-3]
Run Code Online (Sandbox Code Playgroud)
但这对我来说似乎是一种非常不灵活和不优雅的解决方案.
到目前为止我有类似的东西:
pattern = re.compile('^/(?P<artist>[a-zA-Z0-9 ]+)/(?P<release>[a-zA-Z0-9 ]+)/(?P<track>[a-zA-Z0-9 -_]+).[a-zA-Z]*.*')
rel_path = '/The Prodigy/The Fat Of The Land/04 - …Run Code Online (Sandbox Code Playgroud)