Question

I'm confused by the following behavior:

Using Freebase-Python, I send a request to the Freebase API that is a query for a JSON response. I get the response, for example:

  "status": "200 OK", 
  "code": "\/api\/status\/ok", 
  "result": {
    "\/common\/topic\/weblink": [
      {
        "url": "http:\/\/www.boardgamegeek.com\/boardgame\/13\/Settlers of Catan", 
        "description": "BoardGameGeek"
      }
    ], 
    "id": "\/en\/settlers_of_catan"
  }

Within the same RequestHandler class that I used issue the request, I can do things like,

print result.id 
>>> /en/settlers_of_catan
print result["/common/topic/weblink"][0].url
>>> http://www.boardgamegeek.com/boardgame/13/Settlers of Catan

However, when I pass the result object to an HTML template, the weird behavior starts.

I can do,

{{ result.id }}

Which will render "/en/settlers_of_catan" in the browser. But if I try,

{{ result["/common/topic/weblink"][0].url }}

I get an error:

  raise TemplateSyntaxError, "Could not parse the remainder: %s" % token[upto:]
TemplateSyntaxError: Could not parse the remainder: ["/common/topic/weblink"][0].url

I can also just display the result:

{{ result }}

Which results in the browser:

{u'/common/topic/weblink': [{u'url': u'http://www.boardgamegeek.com/boardgame/13/Settlers of Catan', u'description': u'BoardGameGeek'}], u'id': u'/en/settlers_of_catan'}

My question is, why can't I access the result in the HTML template the same way I can from the RequestHandler?

Was it helpful?

Solution

In the django template language dictionary-, list index and attribute lookups are made using a dot ('.').

For that reason it should be something like {{ result.mylink.0.url }}, but this will most like not work using slashes in the key!

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top