Как использовать Jinja в фреймворке Django? - PullRequest
0 голосов
/ 04 июня 2019

Я хочу получить доступ к элементам списка, используя Jinja.

Здесь, в приведенном ниже коде, указаны «id» и изображения. image_name - это поле, в котором хранится изображение

   {% for blog in id%}    
        <h3>{{blog.news_title}}</h3><br/>     
        <a href="/blog/article/{{blog.slug}}"><img src="images[loop.index0].image_name"/></a><br/>
        <time>{{blog.news_date}}</time><br/>
        <a href="/blog/article/{{blog.slug}}">click here</a><br/>
    {% endfor%}</li>

Views.py

def BlogViews(request,blog_type):
    """
        The blogs are displayed according to the latest, current-month and last-month classification
    """
    blog_type=blog_type.replace('-','_')
    response_blog=requests.get("API" % (settings.BASE_URL,blog_type),headers=headers,verify=False)
    if(response_blog.status_code==200):
        data_blog=response_blog.json()
        if(data_blog['ErrorCode']==0 and data_blog['SubErrorCode']==0):
            blog=BlogYearViews()
            blog_images=BlogImages(request,data_blog)
            return render(request,"CombinedBlog.html",{"id":data_blog['Data'],"years":blog,"images":blog_images})
        else:
            return render(request,"Page404.html")
def BlogImages(request,data_blog):
    """
        Returns a list of all the images
    """
    data_image_list=[]
    for i in range(0,len(data_blog['Data'])):
        images=data_blog['Data'][i]['image_id']
        response_image=requests.get("API"%(settings.BASE_URL),headers=headers,verify=False)
        data_image=(response_image.json())
        data_image_list=data_image_list+data_image['Data']
    return (data_image_list)

Ответы [ 2 ]

0 голосов
/ 04 июня 2019

Вам нужно сжать два списка вместе в вашем представлении и просмотреть их в шаблоне.

blog_images = BlogImages(request, data_blog)
blogs_and_images = zip(data_blog['Data'], blog_images)
return render(request, "CombinedBlog.html", {"blogs_and_images": blogs_and_images, "years":blog})

...

{% for blog, image in blogs_and_images %}    
    <h3>{{ blog.news_title }}</h3><br/>     
    <a href="/blog/article/{{ blog.slug }}"><img src="{{ image.image_name }}"/></a><br/>
    <time>{{ blog.news_date }}</time><br/>
    <a href="/blog/article/{{ blog.slug }}">click here</a><br/>
{% endfor %}</li>

Обратите внимание, вы действительно должны использоватьтег {% url %} для создания ссылок, а не для их создания вручную.Также обратите внимание, что ваша функция BlogImages не должна принимать запрос, поскольку она никогда не использует его, и в любом случае она крайне непифонна.Это должно выглядеть так:

def blog_images(data_blog):
    data_image_list = []
    for blog in data_blog['Data']:
        image_id = blog['image_id']
        response_image = requests.get("API" % settings.BASE_URL, headers=headers, verify=False)
        data_image = response_image.json()
        data_image_list.append(data_image['Data'])
    return 

data_image_list

0 голосов
/ 04 июня 2019

Для доступа к списку images с использованием индекса вы можете использовать forloop.counter .

. Вы можете использовать:

{{ forloop.counter }}  # index starts at 1
{{ forloop.counter0 }} # index starts at 0.

В шаблоне вы можете сделать:

<img src="{{images[forloop.counter0].image_name.url}}"/>

Советы:

  • Вы должны рассмотреть вопрос о переименовании списков блогов как blogs или blog_list вместо id.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...