我正在构建我的第一个严肃的Cocoa应用程序.它是一个基于文档的应用程序,使用Core Data进行持久存储.使用Xcode"新项目"模板选项,我的项目开始时使用了几个默认类:
我从那里接受了设计并且它的工作都相当不错,但是通过另一个问题,我遇到了一个我不知道的Cocoa类NSDocumentController.该类显然提供了用于管理基于文档的应用程序中的文档类的默认逻辑.
我的问题是这个类如何进入我的应用程序 - 如果有的话 - 我是否需要它?此时,我使用EventDocument类作为一种顶级控制器.它从菜单中选择用户选择(带有iTunes选项的树形视图),调出处理这些选项的不同视图/控制器并传递托管对象上下文.如果NSDocumentController是"走的路",为什么Apple不会将其作为项目模板的一部分生成?
我正在尝试按照此文档将我的Django应用部署到Google App Engine(GAE).我创建并配置了一个实例,如该文档中所述.我用作开发环境并创建了一个支持Django的GAE项目.Google Cloud SQLPyCharm
我将本地服务器配置为指向GAE服务器.当我尝试在PyCharm中启动GAE本地服务器时,它会在以下内容中对未正确配置的数据库引发异常SETTINGS.PY:
google.appengine.ext.django.backends.rdbms' isn't an available database backend
Run Code Online (Sandbox Code Playgroud)
我可以从堆栈跟踪中看到本地服务器正在使用Django版本,/Library/Python/2.7/site-packages而我认为它应该使用的那个/usr/local/google_appengine/lib.
考虑到我还有其他Django项目应该使用Django版本,最好的解决方法是/Library/Python/2.7/site-packages什么?如果我修改我PYTHONPATH的包含GAang版本的Django,我的所有项目都不会引用那个版本的Django吗?
编辑:更确切地说,GAE本地服务器启动很好,但在我执行syncdb任务更新数据库时抛出提到的堆栈跟踪.
编辑2:在Python解释器下的PyCharm设置中,我发现修改路径的可能性并添加了与GAE SDK一起分发的Django 1.4版本.当我启动GAE开发服务器时,我实际上可以看到它使用GAE SDK中的Django版本,但它仍然在数据库定义上崩溃:
Error was: No module named google.appengine.ext.django.backends.rdbms.base
Run Code Online (Sandbox Code Playgroud)
编辑3:尝试使用本教程部署现有的Django应用程序时遇到了问题.看到这个单独的问题.
我的Django应用程序需要以HTML格式发送电子邮件.根据官方文件:
在电子邮件中包含多个版本的内容会很有用; 典型的例子是发送消息的文本和HTML版本.使用Django的电子邮件库,您可以使用EmailMultiAlternatives类完成此操作.EmailMessage的这个子类有一个attach_alternative()方法,用于在电子邮件中包含邮件正文的额外版本.所有其他方法(包括类初始化)都直接从EmailMessage继承.
......我想出了以下代码:
from django.core.mail import EmailMultiAlternatives
msg = EmailMultiAlternatives()
msg.sender = "someone@somewhere.com"
msg.subject = subject
msg.to = [target,]
msg.attach_alternative(content, "text/html")
msg.send()
Run Code Online (Sandbox Code Playgroud)
这项工作如预期.但是,在某些情况下,我需要包含PDF附件,我之前添加了以下代码msg.send():
if attachments is not None:
for attachment in attachments:
content = open(attachment.path, 'rb')
msg.attach(attachment.name,content.read(),'application/pdf')
Run Code Online (Sandbox Code Playgroud)
虽然这有效 - 所有PDF文档都正确附加到电子邮件 - 但不必要的副作用是电子邮件的HTML内容现在已经消失,而且我留下了一个空的电子邮件正文,其上附有PDF文档.
我在这做错了什么?
我的Django应用程序使用Django Suit作为主题Django管理应用程序的工具.Suit可以做的事情之一是追加和预置元素以形成小部件,如:
class PropertyForm(ModelForm):
class Meta:
model = Property
widgets = {
'amount': EnclosedInput(prepend = "GBP"),
}
Run Code Online (Sandbox Code Playgroud)
效果是:

虽然这是一个很好的功能,但如果我可以动态添加它(如伪代码)会更有用:
'amount': EnclosedInput(prepend = my_model_instance.currency)
Run Code Online (Sandbox Code Playgroud)
我试图像这样覆盖表单的init:
class PropertyForm(ModelForm):
def __init__(self, *args, **kwargs):
inst = kwargs["instance"]
self._meta.widgets["amount"] = EnclosedInput(prepend = inst.currency)
super(PropertyForm, self).__init__(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
奇怪的是,只有当我在init方法中放置断点时才有效.看起来有一些时间问题.
所以我的问题是实现这一目标的最佳方式(如果可以的话)是什么?
我正在用一个NSCollectionView来显示各种物体.除了一件烦人的事情外,整件事情都运作良好.我无法弄清楚如何访问用于表示集合中每个对象的视图上的各种控件.
这是设置:
NSCollectionView在IB中拖入了我的观点.NSCollectionViewItem.在IB中映射我的班级.NSBox作为集合中每个对象的视图.还在IB中映射此类并将其连接到view我的NSCollectionViewItem子类的属性.风景:

生成的集合视图:

推断我的子类NSCollectionViewItem基本上是集合中每个视图的控制器,我在控制器子类的视图中引用了各种控件的出口:
@interface SourceCollectionViewItem : NSCollectionViewItem
@property (weak) IBOutlet NSTextField *nameTextField;
@property (weak) IBOutlet NSTextField *typeTextField;
@property (weak) IBOutlet RSLabelView *labelView;
@property (weak) IBOutlet NSButton *viewButton;
@end
Run Code Online (Sandbox Code Playgroud)
当我检查SourceCollectionViewItem调试器中的任何实例时,所有属性都显示为nil,尽管事实上我可以在屏幕上看到它们并且所有内容都显示为应该是.
我的设置灵感来自Apple的示例应用程序IconCollection.
我显然缺少一些东西.什么?
编辑:我发现各种帖子暗示了类似的问题: CocoaBuilder.com和SO上的这个问题.
编辑:只是为了完成:这篇文章也涉及主题,并提供一个基于接受的答案中提到的选项组合的解决方案.
我在 Django 中使用 Grappelli。当我按照Django 文档中概述的过程覆盖特定模型的特定模板时,似乎 Django(或 Grappelli??)正在努力正确呈现模板。
我已change_form.html使用以下子路径将文件复制到模板目录:
admin/properties/Calendar
Run Code Online (Sandbox Code Playgroud)
其中properties是应用程序Calendar的名称,是我要覆盖更改表单的模型的名称。现在出现以下

至少有两件事没有正确呈现:
面包屑条要细得多,面包屑与条的左边框紧密对齐。
更改历史记录的链接位置错误(出现在左侧),样式错误(没有圆角)并且出现了两次。
我仔细检查了 Django 使用了正确的模板文件,因此尽管存在上述缺陷,但记录的机制仍然有效。当我重命名复制的模板文件或将其从我的应用程序中删除时,一切看起来都很好。
在我深入研究之前,我希望有人能暗示这里出了什么问题。所有未覆盖的模板似乎都可以正常工作。
我正在尝试为我的 Django 应用程序中的模型实现一个 ImageField。该应用程序在 Google App Engine 上运行。但是在上传(本地机器,使用 GAE SDK 1.7.7)时,我得到一个[Errno 78] Function not implemented.
错误源自对os.makedirs()in的调用django.core.files.storage.FileSystemStorage._save();调用的参数makedirs是:
u'/Users/.../PycharmProjects/myproject/media/uploaded
Run Code Online (Sandbox Code Playgroud)
我的MEDIA_ROOT条目SETTINGS.PY包含:
/Users/.../PycharmProjects/myproject/media/
Run Code Online (Sandbox Code Playgroud)
我的MEDIA_URL条目SETTINGS.PY包含:
/media/
Run Code Online (Sandbox Code Playgroud)
媒体目录包含一个名为“已上传”的子目录。我检查了权限,他们需要读/写访问权限。
我的 ImageField 的字段定义是:
image = models.ImageField(upload_to = "uploaded/"
Run Code Online (Sandbox Code Playgroud)
出于某种原因,Django 想要创建已经存在的目录。使用 Django 控制台os.path.exists(u'path/to/media/upload')返回 True(这是正确的),所以我不明白为什么 Django 要创建目录。
此外,我使用 Google Cloud SQL 进行存储并安装 PILLOW 进行图像处理。我还在我的app.yaml.
我可能遗漏了一些基本的东西,但目前对导致这种情况的原因一无所知......
我已成功创建了一个私钥,并已阅读有关服务器到服务器身份验证概念的各种Google文档页面.
我需要创建一个JWT来授权我的App Engine应用程序(Python)访问Google日历并在日历中发布事件.从oauth2client它的源代码看起来我需要oauth2client.client.SignedJwtAssertionCredentials用来创建JWT.
我目前所缺少的是一个程式化的示例Python代码,其中包含创建JWT所涉及的各个步骤,并使用它来验证我的App Engine应用程序的Google日历.此外,从SignedJwtAssertionCredentials源代码看起来我需要一些App Engine兼容库来执行签名.
任何人都可以对此有所了解吗?
我正在浏览Apple的一个示例Cocoa应用程序(ImageKitDemo)并注意到其中一个源文件(.m文件)实际上包含另一个类的定义(接口和实现).这样做有什么好处?
django ×5
cocoa ×2
django-forms ×1
nsdocument ×1
oauth ×1
objective-c ×1
pycharm ×1
python ×1
xcode ×1