小编Nee*_*ran的帖子

Django视图返回json而不使用模板

这与此问题有关:Django根据客户端python返回json和html

我有一个django应用程序的命令行python api.当我通过api访问应用程序时它应该返回json并且使用浏览器它应该返回html.我可以使用不同的URL来访问不同的版本,但是如何使用一个模板在views.py中呈现html模板和json?

要呈现我将使用的HTML:

return render_to_response('sample/sample.html....')
Run Code Online (Sandbox Code Playgroud)

但是如果没有放入json模板,我将如何为json做同样的事情呢?(内容类型应该是application/json而不是text/html)

编辑1:

什么会决定json和html输出?

所以在我看来:

if something:
    return render_to_response('html_template',.....)
else:
    return HttpReponse(jsondata,mimetype='application/json')
Run Code Online (Sandbox Code Playgroud)

谢谢

python django json django-views

77
推荐指数
5
解决办法
10万
查看次数

类型错误:格式需要映射

我有一个字符串和一个对象列表:

gpl = "%(id)s : %(atr)s"

objects = [{'id':1, 'content':[{'atr':'big', 'no':2}]},  {'id':2, 'content': [{'atr':'small', 'no':3}]}]

for obj in objects:
   for con in obj['content']:
       print gpl %(obj,con)
Run Code Online (Sandbox Code Playgroud)

我明白了:

TypeError: format requires a mapping
Run Code Online (Sandbox Code Playgroud)

我该如何打印?我正在尝试打印:

1 : big
2 : small
Run Code Online (Sandbox Code Playgroud)

谢谢

python string dictionary list object

21
推荐指数
1
解决办法
2万
查看次数

如何仅捆绑一系列变更集?

我对我的工作存储库进行了一些更改,并添加了一些小的(2kb-10kb)python文件.然后我捆绑了我的更改:

hg bundle --base 100:120 nameofbundle.hg
Run Code Online (Sandbox Code Playgroud)

我的捆绑似乎是20MB.当我跑:

hg diff -r 100:120
Run Code Online (Sandbox Code Playgroud)

我可以看到我在python文件中所做的所有更改,但它仍然没有解释20MB大小.我可能有可能添加另一个文件,从而导致这个奇怪的大小,有没有办法查看这个文件或被跟踪的文件(从r100-120)?

我希望我已经说清楚了,我仍然是一个善变的新手.

编辑1

我跑的时候

hg bundle --base 119:120 nameofbundle.hg
hg bundle --base 118:120 nameofbundle.hg
Run Code Online (Sandbox Code Playgroud)

当我在python文件中为两个变更集编辑了8行时,我找到了439个变更集.我不明白这些变化是不是在差异中显示?

谢谢

回答:

该命令应该是

hg bundle -r 120 --base 100 nameofbundle.hg
Run Code Online (Sandbox Code Playgroud)

这只捆绑了20个变更集,并将尺寸缩小到仅仅16k.

mercurial bundle

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

python脚本tempfile中的Vim编辑器

我成功地找到了生成vim编辑器和从python脚本创建tempfile的代码.代码在这里,我在这里找到它:从python脚本调用EDITOR(vim)

import sys, tempfile, os
from subprocess import call

EDITOR = os.environ.get('EDITOR','vim') 

initial_message = "" 

with tempfile.NamedTemporaryFile(suffix=".tmp") as tempfile:
  tempfile.write(initial_message)
  tempfile.flush()
  call([EDITOR, tempfile.name])
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是我退出编辑器后无法访问临时文件的内容.

tempfile
<closed file '<fdopen>', mode 'w+b' at 0x87c47b0>

tempfile.readline()
Run Code Online (Sandbox Code Playgroud)

我明白了

ValueError: I/O operation on closed file
Run Code Online (Sandbox Code Playgroud)

我做了:

myfile = open(tempfile.name)
IOError: [Errno 2] No such file or directory: '/tmp/tmp7VKzfl.tmp'
Run Code Online (Sandbox Code Playgroud)

使用编辑器编辑后,如何在python脚本中访问该文件?

谢谢

python vim file temporary-files

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

Mercurial如何在repo中为一个文件创建补丁

我的repo中有一个名为some/work/file.py的文件.

我一直在repo工作(除了file.py之外的其他文件)并提交我的更改并从版本20到30.

如何在不包含其他文件的情况下从版本20到30仅为file.py创建补丁?

就像是:

hg export 20:30 file.py > new.patch
Run Code Online (Sandbox Code Playgroud)

尝试过该命令但不起作用.

谢谢

mercurial export

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

从django模板获取序列化的json对象?

我需要澄清一下.例如,如果我使用序列化对象执行视图:

def sample(request):
    res = [{'name':'man'}]
    encoded = json.dumps(res)
    return render_to_response('sample/example.html',{'encoded':encoded} )
Run Code Online (Sandbox Code Playgroud)

在我的模板中,我通过:

{{encoded}}
Run Code Online (Sandbox Code Playgroud)

现在从python脚本我可以做:

data = json.loads(urllib2.urlopen(url/to/site).read()
Run Code Online (Sandbox Code Playgroud)

它说ValueError:无法解码JSON对象.但是{{encoded}}不是json对象吗?如果是这样我怎么能得到它?

谢谢

python django json

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

Django根据客户端python返回json和html

我有一个django应用程序,它有html模板,我还有一个命令行python api,可以对服务器上的django应用程序执行GET和POST请求.api几乎可以完成django应用程序可以执行的所有操作.我怎么做到当我通过浏览器访问django应用程序时它返回html但是当我通过api访问它时它返回json?

我将在哪里放置json以及我必须对我的应用程序进行哪些更改?

谢谢

html python django json

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

Python无和条件

我这里有一些代码:

m = None
n = None

if not m:
    print "Something happens"
>>> Something happens
Run Code Online (Sandbox Code Playgroud)

如果我做:

if not m and n:
    print "Something happens"
Run Code Online (Sandbox Code Playgroud)

什么都没发生.

但我能做到:

m, n = 1,2
if m and n:
    print "Something happens"
>>> Something happens
Run Code Online (Sandbox Code Playgroud)

为什么如果和不处理相同的方式?"如果不是",不接受'和'陈述?

谢谢

python

3
推荐指数
2
解决办法
9718
查看次数

使用rspec在控制器中调用API调用

我只是有点困惑为什么我不能在我的控制器规范中存根局部变量.

这是我的控制器:

Class UsersController < ApplicationController
    ...
    def get_company
        resp = Net::HTTP.get("http://get_company_from_user_id.com/#{params[:id]}.json")
        @resp = JSON.parse(resp.body)
        ...
Run Code Online (Sandbox Code Playgroud)

我的规格如下:

class ResponseHelper
    def initialize(body)
        @body = body
    end
end

describe "Get company" do
it "returns successful response" do
        stub_resp_body = '{"company": "example"}' 
        stub_resp = ResponseHelper.new(stub_resp_body)
    controller.stub!(:resp).and_return(stub_resp)
    get :get_company, {:id => @test_user.id}
    expect(response.status).to eq(200)
    end
end
Run Code Online (Sandbox Code Playgroud)

我仍然得到一个错误说:

 Errno::ECONNREFUSED:
 Connection refused - connect(2)
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?如果我正在对resp变量进行存根,为什么它仍在尝试执行HTTP请求resp?在这种情况下如何存根变量?

ruby rspec stubbing

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

按日期范围过滤不工作django

我的模型是:

class Report(models.Model):
    created = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)

我的观点是:

def filter_range(request):
    results = Report.objects.filter(created__range=['2012/01/09 00:00','2012/01/11 23:59'])
    return render_to_response("log/filter.html", {'results':results})
Run Code Online (Sandbox Code Playgroud)

它给出了错误:

Exception Type:     ValidationError
Exception Value:    [u'Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format.']
Run Code Online (Sandbox Code Playgroud)

可能有什么问题?谢谢你。

django date range filter

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