Search from database using ajax in django - python

I am working on a django project and making a dashboard in which I am trying to add a search bar in which on typing I will get a list of all the relevant searches.
Views.py
def get_user_name(request):
if request.is_ajax():
results = []
context = RequestContext(request)
if request.method == 'GET':
q = request.GET.get('search_text')
results = User.objects.filter(user_name__contains = q)
context = {
'data': []
}
for record in results:
data = {
'id': record.id,
'code': record.code,
'name': record.name,
'manager': record.manager.email,
'type': record.type.upper(),
'status': record.current_state.display_name,
}
return render(request, 'listinguser.html', context)
listinguser.html
{% extends "base.html" %}
{% block title %}Users Listing Page{% endblock %}
{% block body %}
<div class='page_header'>
<div class="ui-widget">
<p align="right">
<input type="text" placeholder="Type user name" id="user_name" name="term">
</p>
</div>
<script>
$("#user_name").keypress(function(){
$.ajax({
type: "GET",
url: "{% url "user_name" %}",
data: {
'search_text' : $('#chain_name').val(),
'csrfmiddlewaretoken' : $("input[name=csrfmiddlewaretoken]").val()
},
dataType: "json",
success: function(response) {
//success code
},
error: function(rs, e)
alert(rs.responseText);
}
});
})
</script>
</div>
<div class="col-md-6" style="width:100%">
<table id="data-table" class="table table-striped table-bordered">
<thead>
<tr>
<th style="width: 5%;">#</th>
<th style="width: 8%;">Id</th>
<th style="width: 15%;">Name</th>
<th style="width: 15%;">Status</th>
</tr>
</thead>
<tbody>
{% for record in data %}
<tr>
<td>{{ forloop.counter}}</td>
<td>{{ record.user_id }}</td>
<td>{{ record.user_name }} <br>({{ record.user_type }})</td>
<td>{{ record.user_status }}</td>
{% endfor %}
</tbody>
</table>
{% if page.has_other_pages %}
<ul class="pagination">
{% if page.has_previous %}
<li>«</li>
{% else %}
<li class="disabled"><span>«</span></li>
{% endif %}
{% for i in page.paginator.page_range %}
{% if page.number == i %}
<li class="active"><span>{{ i }} <span class="sr-only">(current)</span></span></li>
{% else %}
<li>{{ i }}</li>
{% endif %}
{% endfor %}
{% if page.has_next %}
<li>»</li>
{% else %}
<li class="disabled"><span>»</span></li>
{% endif %}
</ul>
{% endif %}
</div>
{% endblock %}
Problem I am facing:
While I type something in the search box the ajax func is called but it always goes into the error block.
Also I want the search result to get populated in the table just as the table normally is.
This is the API which I use to populate the table.
class UserListingView(View):
def get(self, request):
try:
page_size = int(request.GET.get('page_size', 10))
page_no = int(request.GET.get('page_no', 1))
except ValueError:
# Set the default value
page_size = 100
page_no = 1
filter_on = request.GET.get('current_state', None)
if 'listing_user' in request.user.permissions:
users = Users.objects.select_related(
"user", "user_state", "user_manager"
).all()
else:
users = User.objects.select_related(
"user", "user_state", "user_manager"
).filter(user_manager=request.user)
paginator = Paginator(integrations, page_size)
context = {
'page': {},
'data': []
}
try:
page = paginator.page(page_no)
context['current_page'] = page_no
except EmptyPage:
# Show the last page
page = paginator.page(paginator.num_pages)
context['current_page'] = paginator.num_pages
for record in page:
data = {
'user_id': record.id,
'user_code': record.user_code,
'user_id': record.user_id,
'user_name': record.user_name,
'user_manager': record.user_manager.email,
'user_type': record.user_type.upper(),
'user_status': record.user_state.display_name,
'user_status': user_status,
}
context['data'].append(data)
context['page'] = page
return render(request, 'listinguser.html', context)

Related

How to properly unpack a nested dictionary in a django HTML template?

So I was able to figure out how to unpack a dictionary keys and values on to a HTML template, but I am a bit confused as to how to unpack if if a dictionary value is a QuerySet. For example I passing in all the timeslots of the given user into the dictonary. How can I unpack the attributes of the TimeSlot QuerySet for each timeslot such as the start time and end time?
This is my HTML Template:
<table>
{% for key, value in user_info.items %}
{% for key2,value2 in value.items %}
<tr>
<td>{{key2}}</td>
<td>{{value2}}<td>
</tr>
{% endfor %}
<br>
{% endfor %}
</table>
My function in views.py
def check_food_availibility(request):
food = FoodAvail.objects.all()
timeslots = TimeSlot.objects.all()
users_dict = {}
for i in range(len(user_info)):
user = {
"author": None,
"food_available": None,
"description": None,
"timeslot": None
}
user["author"] = user_info[i].author.username
user["food_available"] = user_info[i].food_available
user["description"] = user_info[i].description
if TimeSlot.objects.filter(time_slot_owner=user_info[i].author):
user["timeslot"] = TimeSlot.objects.filter(time_slot_owner=user_info[i].author)
users_dict[user_info[i].author.username] = user
return render(request, "food_avail/view_food_avail.html", {"user_info": users_dict})
This is how it shows up currently:
try this
<table>
{% for key, value in user_info.items %}
{% for key2,value2 in value.items %}
<tr>
<td>{{key2}}</td>
{% if key2 == 'timeslot' %}
<td>
{% for i in value2 %}
i.start_time <-> i.end_time // just an example put your field here
{% endfor %}
</td>
{% else %}
<td>{{value2}}<td>
{% endif %}
</tr>
{% endfor %}
<br>
{% endfor %}
</table>

Multiple FusionCharts on Same page with Django

I am trying to build a dashboard type site with multiple charts. I am using Django with FusionCharts and a Postregsql database backend. I am able to get one chart to render, but I can't get a second one to appear at all. I think it is probably something in my views.py with how I am creating the functions. Any help is much appreciated.
Code is as follows:
views.py
from django.shortcuts import render
from django.http import HttpResponse
# Include the `fusioncharts.py` file that contains functions to embed the charts.
from .fusioncharts import FusionCharts
from .models import *
# The `chart` function is defined to load data from a `Country` Model.
# This data will be converted to JSON and the chart will be rendered.
def chart(request):
# Chart data is passed to the `dataSource` parameter, as dict, in the form of key-value pairs.
dataSource = {}
dataSource['chart'] = {
"caption": "Final Sale Price by Customer",
"showValues": "0",
"theme": "fint"
}
dataSource['data'] = []
for key in Customer.objects.all():
data = {}
data['label'] = key.customername
data['value'] = key.Final_Price
dataSource['data'].append(data)
column2D = FusionCharts("column2D", "ex1", "600", "350", "chart-1", "json", dataSource)
return render(request, 'dashboard.html', {'output': column2D.render()})
def chart2(request):
# Chart data is passed to the `dataSource` parameter, as dict, in the form of key-value pairs.
dataSource2 = {}
dataSource2['chart'] = {
"caption": "Final Sale Price by Plant",
"showValues": "0",
"theme": "fint"
}
dataSource2['data'] = []
for key in Customer.objects.all():
data = {}
data['label'] = key.customername
data['value'] = key.Final_Price
dataSource2['data'].append(data)
column2D = FusionCharts("column2D", "ex1", "600", "350", "chart-2", "json", dataSource2)
return render(request, 'dashboard.html', {'output2': column2D.render()})
dashboard.html
{% extends "index.html" %}
{% load static %}
{% block title %}{{title}}{% endblock title %}
{% block sidenav %}
{% for page in page_list %}
<li>
{{page.title}}
</li>
{% endfor %}
{% endblock sidenav %}
{% block content %}
{% autoescape off %}
{{ content }}
{% endautoescape %}
<p>
<table>
<tr>
<th>Customer</th>
<th>Plant</th>
</tr>
<tr>
<td><div id="chart-1">{{ output|safe }}</div></td>
<td><div id="chart-2">{{ output|safe }}</div><h1>test</h1></td>
</tr>
</table>
Page last Update: {{last_updated|date:'D d F Y' }}
</p>
{% endblock content %}
manage.py
from django.db import models
class Customer(models.Model):
customername = models.CharField(max_length=250)
Final_Price = models.CharField(max_length=50)
def __unicode__(self):
return u'%s %s' % (self.customername, self.Final_Price)
class Plant(models.Model):
site = models.CharField(max_length=250)
Final_Price = models.CharField(max_length=50)
def __unicode__(self):
return u'%s %s' % (self.site, self.Final_Price)
I ended up figuring it out. It turns out there were a boatload of problems in the previous code. I figured I'd post it as a reference for someone having the same question in the future. The code that is working is as follows:
views.py
from django.shortcuts import render
from django.http import HttpResponse
# Include the `fusioncharts.py` file that contains functions to embed the charts.
from .fusioncharts import FusionCharts
from .models import *
# The `chart` function is defined to load data from a `Country` Model.
# This data will be converted to JSON and the chart will be rendered.
def chart(request):
# Customer
dataSource = {}
dataSource['chart'] = {
"caption": "Final Sale Price by Customer",
"showValues": "0",
"theme": "carbon"
}
dataSource['data'] = []
for key in Customer.objects.all():
data = {}
data['label'] = key.customername
data['value'] = key.Final_Price
dataSource['data'].append(data)
plantdataSource = {}
plantdataSource['chart'] = {
"caption": "Final Sale Price by Plant",
"showValues": "0",
"theme": "carbon"
}
plantdataSource['data'] = []
for key in Plant.objects.all():
data = {}
data['label'] = key.site
data['value'] = key.Final_Price
plantdataSource['data'].append(data)
colchart = FusionCharts("column2D", "ex1", "1000", "350", "chart-1", "json", dataSource)
plantchart = FusionCharts("column2D", "ex2", "1000", "350", "chart-2", "json", plantdataSource)
return render(request, 'dashboard.html', {'output': colchart.render(), 'output2': plantchart.render()})
dashboard.html
{% extends "index.html" %}
{% load static %}
{% block title %}{{title}}{% endblock title %}
{% block sidenav %}
{% for page in page_list %}
<li>
{{page.title}}
</li>
{% endfor %}
{% endblock sidenav %}
{% block content %}
{% autoescape off %}
{{ content }}
{% endautoescape %}
<p>
<table>
<tr>
<th>Customer</th>
<th>Plant</th>
</tr>
<tr>
<td><div id="chart-1">{{ output|safe }}</div></td>
<td><div id="chart-2">{{ output2|safe }}</div></td>
</tr>
</table>
Page last Update: {{last_updated|date:'D d F Y' }}
</p>
{% endblock content %}
You can just split the screen in HTML, and it will work as below
{{ chartTitle|safe }}
<div style="width: 100%; overflow:auto;">
<div style="float:left; width: 50%">
<div id="chart-1" style="width: 50%;flaot: left;">{{ output|safe }}</div>
</div>
<div style="float:right; width: 50%">
<div id="chart-2">{{ pie_output|safe }}</div>
</div>
</div>
<br/>

How to transfer page_number to urls.py

I want transfer page_number to url with name='onePart' from part_list.html. In my code page_number=1, but I want change it to current page of paginator depends on page. How I can do this?
P.S. sorry for my english:)
views.py:
def PartyNumView(request, page_number = 1):
all_parties = Part.objects.all()
current_page = Paginator(all_parties, 1)
try:
context = current_page.page(page_number)
except PageNotAnInteger:
context = current_page.page(1)
except EmptyPage:
context = current_page.page(current_page.num_pages)
return render_to_response('part_list.html', {'PartyNum': context})
def forOne(request, pk):
onePart = get_object_or_404(Part, pk=pk)
return render_to_response('SinglePart.html', {'onePart': onePart})
**urls.py:**
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^parties/(\d+)/$', PartyNumView),
url(r'^parties', PartyNumView),
url(r'parties/(?P<page_number>[\d]+)/(?P<pk>[\d]+)$', forOne, name='onePart'),
url(r'^main/', TemplateView.as_view(template_name='main.html')), #static html
url(r'^measures/', TemplateView.as_view(template_name='IcDesc.html')), #static html
]
A little bit of HTML code part_list.html:
{% for object in PartyNum %}
<tr>
<td>{{ forloop.counter }}</td>
<td> {{ object.Party_number }}</td>
<td>{{ object.Film }}</td>
<td>{{ object.Thick }}</td>
<td>{{ object.Critical_temperature }}</td>
<td>{{ object.R_s }}</td>
{% endfor %}
</tbody>
</table>
</table>
<div class="row" style="margin:auto">
<div class="large-3 large-offset-5 columns">
<ul class="pagination">
{% if PartyNum.has_previous %}
<li class="arrow">«</li>
{% else %}
<li class="arrow disabled">«</li>
{% endif %}
{% for page in PartyNum.paginator.page_range %}
{% if page == PartyNum.number %}
<li class="current">{{ page }}</li>
{% else %}
<li>{{ page }}</li>
{% endif %}
{% endfor %}
{% if PartyNum.has_next %}
<li class="arrow">»</li>
{% else %}
<li class="arrow disabled">»</li>
{% endif %}
</ul>
</div>
</div>
I'm begginer in django. If you help me, I will be grateful
Pagination with Function-Based Views
views.py
from django.contrib.auth.models import User
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
def index(request):
user_list = User.objects.all()
page = request.GET.get('page', 1)
paginator = Paginator(user_list, 10)
try:
users = paginator.page(page)
except PageNotAnInteger:
users = paginator.page(1)
except EmptyPage:
users = paginator.page(paginator.num_pages)
return render(request, 'core/user_list.html', { 'users': users })
user_list.html
<table class="table table-bordered">
<thead>
<tr>
<th>Username</th>
<th>First name</th>
<th>Email</th>
</tr>
</thead>
<tbody>
{% for user in users %}
<tr>
<td>{{ user.username }}</td>
<td>{{ user.first_name }}</td>
<td>{{ user.email }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% if users.has_other_pages %}
<ul class="pagination">
{% if users.has_previous %}
<li>«</li>
{% else %}
<li class="disabled"><span>«</span></li>
{% endif %}
{% for i in users.paginator.page_range %}
{% if users.number == i %}
<li class="active"><span>{{ i }} <span class="sr-only">(current)</span></span></li>
{% else %}
<li>{{ i }}</li>
{% endif %}
{% endfor %}
{% if users.has_next %}
<li>»</li>
{% else %}
<li class="disabled"><span>»</span></li>
{% endif %}
</ul>
{% endif %}

How do you add a summary row for Flask-Admin?

In my flask-admin index_view, I am displaying financial information for my rows.
I would like to add an extra row, "summary row", at the bottom of my index_view table which sums up all the columns.
How can I accomplish this?
There's a couple of things you need to do. Provide a custom list.html template and override the render() method for the view. In the render method inject your summary data into the kwargs and in the custom template use the summary data to output appropriate html. You could add the summary data to the end of the existing data table or add it to a separate table, as seen in the example below.
Here's a self-contained example (two files) using Flask-Admin 1.5, SQLAlchemy and SQLite. custom_list.html is taken directly from flask-admin list.html and we are manipulating the block beginning at line 68:
{% block model_list_table %}
...
{% endblock %}
Note that in the render() method the summary data is an array of dicts. Each dict has a 'title' attribute (e.g 'title: 'Page Total' plus an attribute for each of the columns summary data is required.
app.py
import random
import string
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_admin.contrib.sqla import ModelView
from flask_admin import Admin, expose
# Create application
from sqlalchemy import func
app = Flask(__name__)
# Create dummy secrey key so we can use sessions
app.config['SECRET_KEY'] = '123456790'
# Create in-memory database
app.config['DATABASE_FILE'] = 'sample_db.sqlite'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + app.config['DATABASE_FILE']
db = SQLAlchemy(app)
# Flask views
#app.route('/')
def index():
return 'Click me to get to Admin!'
class Project(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(255), nullable=False, unique=True)
cost = db.Column(db.Integer(), nullable=False)
def __str__(self):
return unicode(self).encode('utf-8')
def __unicode__(self):
return "Name: {name}; Cost : {cost}".format(name=self.name, cost=self.cost)
class ProjectView(ModelView):
# don't call the custom page list.html as you'll get a recursive call
list_template = 'admin/model/custom_list.html'
form_columns = ('name', 'cost')
page_size = 5
def page_cost(self, current_page):
# this should take into account any filters/search inplace
_query = self.session.query(Project).limit(self.page_size).offset(current_page * self.page_size)
return sum([p.cost for p in _query])
def total_cost(self):
# this should take into account any filters/search inplace
return self.session.query(func.sum(Project.cost)).scalar()
def render(self, template, **kwargs):
# we are only interested in the list page
if template == 'admin/model/custom_list.html':
# append a summary_data dictionary into kwargs
_current_page = kwargs['page']
kwargs['summary_data'] = [
{'title': 'Page Total', 'name': None, 'cost': self.page_cost(_current_page)},
{'title': 'Grand Total', 'name': None, 'cost': self.total_cost()},
]
return super(ProjectView, self).render(template, **kwargs)
admin = Admin(app, template_mode="bootstrap3")
admin.add_view(ProjectView(Project, db.session))
def build_sample_db():
db.drop_all()
db.create_all()
for _ in range(0, 100):
_cost = random.randrange(1, 1000)
_project = Project(
name=''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(10)),
cost=_cost
)
db.session.add(_project)
db.session.commit()
if __name__ == '__main__':
build_sample_db()
app.run(port=5000, debug=True)
templates/admin/model/custom_list.html
{% extends 'admin/model/list.html' %}
{% block model_list_table %}
<div class="table-responsive">
<table class="table table-striped table-bordered table-hover model-list">
<thead>
<tr>
{% block list_header scoped %}
{% if actions %}
<th class="list-checkbox-column">
<input type="checkbox" name="rowtoggle" class="action-rowtoggle" title="{{ _gettext('Select all records') }}" />
</th>
{% endif %}
{% block list_row_actions_header %}
{% if admin_view.column_display_actions %}
<th class="col-md-1"> </th>
{% endif %}
{% endblock %}
{% for c, name in list_columns %}
{% set column = loop.index0 %}
<th class="column-header col-{{c}}">
{% if admin_view.is_sortable(c) %}
{% if sort_column == column %}
<a href="{{ sort_url(column, True) }}" title="{{ _gettext('Sort by %(name)s', name=name) }}">
{{ name }}
{% if sort_desc %}
<span class="fa fa-chevron-up glyphicon glyphicon-chevron-up"></span>
{% else %}
<span class="fa fa-chevron-down glyphicon glyphicon-chevron-down"></span>
{% endif %}
</a>
{% else %}
{{ name }}
{% endif %}
{% else %}
{{ name }}
{% endif %}
{% if admin_view.column_descriptions.get(c) %}
<a class="fa fa-question-circle glyphicon glyphicon-question-sign"
title="{{ admin_view.column_descriptions[c] }}"
href="javascript:void(0)" data-role="tooltip"
></a>
{% endif %}
</th>
{% endfor %}
{% endblock %}
</tr>
</thead>
{% for row in data %}
<tr>
{% block list_row scoped %}
{% if actions %}
<td>
<input type="checkbox" name="rowid" class="action-checkbox" value="{{ get_pk_value(row) }}" title="{{ _gettext('Select record') }}" />
</td>
{% endif %}
{% block list_row_actions_column scoped %}
{% if admin_view.column_display_actions %}
<td class="list-buttons-column">
{% block list_row_actions scoped %}
{% for action in list_row_actions %}
{{ action.render_ctx(get_pk_value(row), row) }}
{% endfor %}
{% endblock %}
</td>
{%- endif -%}
{% endblock %}
{% for c, name in list_columns %}
<td class="col-{{c}}">
{% if admin_view.is_editable(c) %}
{% set form = list_forms[get_pk_value(row)] %}
{% if form.csrf_token %}
{{ form[c](pk=get_pk_value(row), display_value=get_value(row, c), csrf=form.csrf_token._value()) }}
{% else %}
{{ form[c](pk=get_pk_value(row), display_value=get_value(row, c)) }}
{% endif %}
{% else %}
{{ get_value(row, c) }}
{% endif %}
</td>
{% endfor %}
{% endblock %}
</tr>
{% else %}
<tr>
<td colspan="999">
{% block empty_list_message %}
<div class="text-center">
{{ admin_view.get_empty_list_message() }}
</div>
{% endblock %}
</td>
</tr>
{% endfor %}
</table>
</div>
<h3>Summaries</h3>
<div class="table-responsive">
<table class="table table-striped table-bordered table-hover model-list">
<thead>
<tr>
{% if actions %}
<th class="list-checkbox-column">
</th>
{% endif %}
<th class="col-md-1"></th>
{% for c, name in list_columns %}
{% set column = loop.index0 %}
<th class="column-header col-{{c}}">
{{ name }}
</th>
{% endfor %}
</tr>
</thead>
{% for row in summary_data %}
<tr>
<td colspan="2"><strong>{{ row['title'] or ''}}</strong></td>
{% for c, name in list_columns %}
<td class="col-{{c}}">
{{ row[c] or ''}}
</td>
{% endfor %}
</tr>
{% endfor %}
</table>
</div>
{% block list_pager %}
{% if num_pages is not none %}
{{ lib.pager(page, num_pages, pager_url) }}
{% else %}
{{ lib.simple_pager(page, data|length == page_size, pager_url) }}
{% endif %}
{% endblock %}
{% endblock %}

Django/Python : Sort python's dictionaries with the equals key

I am currently trying to sort two Python dictionaries into an HTML array such as:
#Headers
DictA = {'value': 'valeur', 'name': 'nom' }
#Data
DictB = {'value': '456', 'name': 'Test' }
I wanted to sort these two dictionaries in order to get the '456' in DictB equals to the key 'value' in DictA.
Note: I used other dictionaries than DictA and DictB, it was just an example. But it fits my problem.
In my views.py, I define my two dictionaries such as:
headers = json.loads(entries[0].form_data_headers)
data = json.loads(entries[1].saved_data)
valuesData = data.values()
then I pass them into the template.html via the context:
context = {'entries': entries, 'form_entry_id': form_entry_id, 'headers': headers, 'data': data, 'valuesData': valuesData}
Thus, in my template, it will print an array with the headers (DictA) and the datas (DictB).
In my template I make this code:
<thead>
<!-- Test pr voir si les values sont pris en compte ou non -->
<p>{{valuesData}}</p>
<tr>
{% for entry in headers %}
<td>
{{ entry }}
</td>
{% endfor %}
</tr>
</thead>
And the datas are in another for loop:
<tbody>
<thead>
<!-- Test pr voir si les values sont pris en compte ou non -->
<p>{{valuesData}}</p>
<tr>
{% for entry in dataValues %}
<td>
{{ entry }}
</td>
{% endfor %}
</tr>
</thead>
</tbody>
The result is kinda such as follow:
name equals 456 (instead of the name of the form)
geom equals test (instead of my coordinate)
etc.
It doesn't match the right header.
I was thinking about making two for loops with an if statement in it:
{%if headers['name'] == dataValues['name']%}
<td>dataValues['name']</td>
But I get an error as dataValues['name'] could not be parsed.
The rest of the code is in Javascript:
{% endblock content %}
{% block javascript %}
<script type="text/javascript">
function GetURLParameter(param_name){
var sPageURL = window.location.search.substring(1);
var sParameterName = sPageURL.split('=');
return sParameterName[1];
}
var name= GetURLParameter(name);
document.querySelector('.page-header .value').innerHTML = name;
</script>
{% endblock %}
{% block main-content-inner-attrs %}
{% endblock main-content-inner-attrs %}
{% block sidebar-wrapper %}
{% endblock sidebar-wrapper %}
The rest of the code is in javascript :
{% endblock content %}
{% block javascript %}
<script type="text/javascript">
function GetURLParameter(param_name){
var sPageURL = window.location.search.substring(1);
var sParameterName = sPageURL.split('=');
return sParameterName[1];
}
var name= GetURLParameter(name);
document.querySelector('.page-header .value').innerHTML = name;
</script>
{% endblock %}
{% block main-content-inner-attrs %}
{% endblock main-content-inner-attrs %}
{% block sidebar-wrapper %}
{% endblock sidebar-wrapper %}
Here is the right answer :
<tr>
{% for cle, valeur in headersLoop %}
{% for cleVD, valeurVD in valuesData %}
{% if cle == cleVD %}
<td>
<p> {{cle}}{{valeurVD}} </p>
</td>
{% endif %}
{% endfor %}
{% endfor %}
</tr>
I marked it as solved. And create a new topic. Thanks all.

Categories

Resources