Reputation: 141
template.html
{{ profile.tag }}
views.py
class ProfileView(CanEditMixin, UserPassesTestMixin, DetailView):
template_name = "profile/profile_view.html"
queryset = User.objects.all()
context_object_name = 'profile'
slug_field = "username"`
gives output as "tag1,tag2,tag3"
is there ant way to do it in django itself?
Upvotes: 1
Views: 3344
Reputation: 765
The correct way works, but I would use the list
built-in method to just change the string from array.
class MyModel(models.Model):
string_array = models.CharField(max_length=100)
def pass_to_list(self):
return list(self.string_array)
list
method, but you can also just return the string splitted by commasUpvotes: 0
Reputation: 141
I found a better way to solve the problem by adding additional function in the models.py
file
models.py
def tags_list(self):
return self.tags.split(',')
template.html
{% for tag in tags_list %}
<p>{{ tag }}</p>
{% endfor %}
simple and easy!
Upvotes: 2
Reputation: 12106
In your view, split the comma value CharField
field like this:
class ProfileView(CanEditMixin, UserPassesTestMixin, DetailView):
template_name = "profile/profile_view.html"
queryset = User.objects.all()
context_object_name = 'profile'
slug_field = "username"`
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) # get parent context
# the model here should be replaced with the object that has the "tag" attribute. DO NOT use the "model" word.
# Try self.object.tag.split(',')
tag_list = model.tag.split(',') # conversion from a string to a list
context['tag_list'] = tag_list # add to the context the tag_list list
return context
and then in your template simply iterate over it:
{% for tag in tag_list %}
<p>{{ tag }}</p>
{% endfor %}
Upvotes: 0