Skip to content
dragoncommits edited this page Apr 25, 2021 · 2 revisions

easy-faq

easy-faq is a Django app to allow for a simple yet feature rich faq app. with categories, commenting voting of questions and answers all as an optional part of the app.

Quick start

  1. pip install::

    pip install https://github.com/dragoncommits/django-easy-faq/blob/master/dist/django-easy-faq-0.5.tar.gz?raw=true

  2. Add "easy-faq" to your INSTALLED_APPS setting like this::

    INSTALLED_APPS = [ ... 'faq', ]

  3. Include the easy-faq URLconf in your project urls.py like this::

    path('faq/', include('faq.urls')),

  4. Run python manage.py makemigrations to create the faq models migrations.

  5. Run python manage.py migrate to create the faq models.

  6. Start the development server and visit http://127.0.0.1:8000/admin/ to create a category (you'll need the Admin app enabled).(categories part of the app can be disabled)

  7. Visit http://127.0.0.1:8000/faq/ to see the categories.

Settings

you can change most things in settings below is a list of all settings add any or all to change to desired behavior::

FAQ_SETTINGS = ['your_settings_here',]
  1. no_category_description - add if using categories but don't want descriptions for them
  2. no_category - add if don't want to use categories
  3. logged_in_users_can_add_question - add if you want any logged in user to be able to ask a question
  4. logged_in_users_can_answer_question - add if you want any logged in user to be able to answer a question
  5. allow_multiple_answers - add if you want a question to be able to be answered multiple times
  6. no_comments - add if don't want to use comments
  7. anonymous_user_can_comment - add if you want any user to be able to comment including anonymous users
  8. view_only_comments - add if you want users to see posted comments but not be able to add any more
  9. no_votes - add if don't want any voting for useful questions or answers
  10. no_answer_votes - add if only want question voting
  11. no_question_votes - add if only want answer voting

Templates

all of the templates are meant to be overwritten to overwrite them create a faq directory inside of the templates directory and add a html file with the same name to it

if this doesn't work make sure that the templates setting has 'DIRS': ['templates'], in it::

TEMPLATES = [
    {
        ...
        'DIRS': ['templates'],
        ...
    },
]

here is a list of templates and there default template you can overwrite

  1. categories_list.html - faq main view if using categories::

    select a FAQ category

    {% for category in categories %}

    {{category.name}}

    {% if category.description %}

    {{category.description}}

    {% endif %}
    {% endfor %}
  2. category_detail.html - faq category detail view if using categories::

    choose a FAQ Question

    {{category}}

    {% if category.description %}

    {{category.description}}

    {% endif %}
    {% for question in category.question_set.all %}

    {{question.question}}

    {% endfor %}
    back {% if can_add_question %} add question {% endif %}
  3. questions_list.html - lists all questions if not using categories::

    choose a FAQ Question

    {% for question in questions %}

    {{question.question}}

    {% endfor %}

    {% if can_add_question %}


    add question {% endif %}
  4. question_detail.html - the question detail page::

    {{question.question|title}}

    {% if can_vote_question %} found this question helpful? {% csrf_token %} yes({{question.helpful}}) {% csrf_token %} no({{question.not_helpful}}) {% endif %} {% if question.category and category_enabled %}

    category - {{question.category.name}}

    {% endif %}

    {% if allow_multiple_answers %}

    answers

      {% for answer in question.answer_set.all %}
    • {{answer.answer}} {% if can_vote_answer %} | found this answer helpful? {% csrf_token %} yes({{answer.helpful}}) {% csrf_token %} no({{answer.not_helpful}}) {% endif %}
    • {% endfor %}

    {% else %} {% if question.answer_set.exists %}

    answer:

    {{question.answer_set.first.answer}}

    {% if can_vote_answer %} found this answer helpful? {% csrf_token %} yes({{question.answer_set.first.helpful}}) {% csrf_token %} no({{question.answer_set.first.not_helpful}}) {% endif %} {% else %} no answers yet {% endif %} {% endif %}

    {% if can_answer_question %} {% if category_enabled %} answer question {% else %} answer question {% endif %} {% endif %}


    {% if comments_allowed %}

    comments

      {% for comment in question.faqcomment_set.all %}
    • {{comment.comment}}

      posted by {% if comment.user%}{{comment.user}}{% else %}anonymous{% endif %} {{comment.post_time|timesince}} ago
    • {% endfor %}
    {% if add_new_comment_allowed %} {% if category_enabled %} {% else %}
     {% endif %}
     <fieldset>
         <legend>Post Your Comment Here:</legend>
         {% csrf_token %}
         {{comment_form}}
         <input type="submit" name="post">
     </fieldset>
     </form>
     {% endif %}
    

    {% endif %}

  5. answer_form.html - form to add answer to question::

    Answer Question

    {% csrf_token %} {{form}}
  6. comment_form.html - form to add comments to question (only shows up when form has error because view only gets posted to)::

    Post A Comment

    {% csrf_token %} {{form}}
  7. question_form.html - form to add a new question::

    Add Your Question

    {% csrf_token %} {{form}}
  8. vote_form.html - form for voting questions and answers (only shows up when form has error because view only gets posted to)::

    vote

    {% csrf_token %} {{form}}

Template Variables

  1. categories_list.html categories - all the categories (category queryset)

  2. categories_detail.html category - the category chosen (category object) can_add_question - bool if the user can add a question (depends on the settings)

  3. questions_list.html questions - all the questions (question queryset) can_add_question - bool if the user can add a question (depends on the settings)

  4. question_detail.html question - the question chosen (question object) can_vote_question - bool if the user can vote a question (depends on the settings) category_enabled - bool if category enabled in settings allow_multiple_answers - bool if multiple answers allowed in settings can_vote_answer - bool if the user can vote an answer (depends on the settings) can_answer_question - bool if current user can answer question (depends on the settings) comments_allowed - bool if using comments in settings add_new_comment_allowed - bool if current user can add comment (depends on the settings) comment_form - form to submit a new comment

  5. answer_form.html question - the question to add answer to (question object) form - form to add new answer

  6. comment_form.html question - the question to add comment to (question object) form - form to add new comment

  7. question_form.html form - form to add new question

  8. vote_form.html form - form to vote for a question or answer

change log

0.4 fixed bug that logged out users can vote - which then raises exceptions 0.5 fixed migrations