Skip to content

gojuukaze/django-tagify2

Repository files navigation

django-tagify2

GitHub version License: GPL v3

django tag input field using tagify

alt tag

Requirements

  • python3+
  • django 2.0+ (maybe 1.x)

Documentation

Installation

  • download
pip install django-tagify2
or
pip install --index-url https://pypi.org/simple/ django-tagify2 
  • Add 'tagify' application to the INSTALLED_APPS
INSTALLED_APPS = [
    ...
    'tagify',
]
  • Make sure APP_DIRS is True in TEMPLATES
TEMPLATES = [
    ...
    'APP_DIRS': True,
                ...
]

Usage

Quick Start

The form class

Building a form in Django like this:

from django import forms
from tagify.fields import TagField


class TagForm(forms.Form):
    languages = TagField(label='languages', place_holder='add a language', delimiters=' ',
                         data_list=['Python', 'Java', 'PHP', 'Golang', 'JavaScript'], initial='Python Golang')


# or 
def random_number():
    return [random.randint(10, 19), random.randint(10, 19), random.randint(10, 19), random.randint(10, 19), ]


class NumberForm(forms.Form):
    number = TagField(label='number', place_holder='add a number', delimiters=' ',
                      data_list=random_number)


# or 
class TagForm(forms.Form):
    languages = TagField(label='languages', place_holder='add a language', delimiters=' ', )

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['languages'].set_tag_args('data_list', get_languages())

The view

To handle the form we need to instantiate it in the view for the URL where we want it to be published:

from django.http import HttpResponse
from django.shortcuts import render

from example.forms import TagForm


def index(request):
    if request.method == 'POST':
        form = TagForm(request.POST)
        if form.is_valid():
            return HttpResponse(str(form.cleaned_data['languages']))
    else:
        form = TagForm()
    return render(request, 'index.html', {'form': form})

The template

The simplest example is:

<head>
    {{ form.media }}
</head>
<body>
  <form action="" method="post">
      {% csrf_token %}
      {{ form }}
      <br>
      <input type="submit" value="OK">
  </form>
</body>

Using With Model

from django.db import models

from tagify.models import TagField


class People(models.Model):
    name = models.CharField(max_length=30)
    languages = TagField(verbose_name='languages')

Field Arguments

Name Type Default Info
place_holder string "" placeholder
delimiters string "," split tags by any of these delimiters. Example: Space or Coma - ", "
data_list list/function [] an array of tags which they are allowed
black_list list [] an array of tags which aren't allowed
max_tags int None max number of tags
suggestions_chars int 1 minimum characters to input which shows the sugegstions list
pattern string "" Validate input by RegEx pattern. Ex: "[1-9]"

Example

Run example

git clone [email protected]:gojuukaze/django-tagify2.git  
cd django-tagify2
pip install django
python manage.py makemigrations example 
python manage.py createsuperuser
python manage.py migrate   
python manage.py runserver 

# open
# http://127.0.0.1:8000
# http://127.0.0.1:8000/number
# http://127.0.0.1:8000/admin/example/people/