You are uploading this paste as user {{ request.user.get_username() }}
13 | {% endif %} 14 |├── .directory
├── .gitignore
├── INSTALL.md
├── README.md
├── UNLICENSE
├── comments
├── __init__.py
├── admin.py
├── forms.py
├── jinja2
│ └── comments
│ │ ├── comment_form.html
│ │ └── comments.html
├── migrations
│ ├── 0001_initial.py
│ ├── 0002_auto_20150731_1746.py
│ └── __init__.py
├── models.py
├── templates
│ └── comments
│ │ ├── comment_form.html
│ │ └── comments.html
├── tests.py
├── urls.py
└── views.py
├── highlighting
├── __init__.py
├── formatter.py
├── get_languages.py
└── settings.py
├── home
├── __init__.py
├── admin.py
├── jinja2
│ ├── home
│ │ ├── faq.html
│ │ ├── home.html
│ │ ├── latest_pastes.html
│ │ ├── submit_paste_form.html
│ │ ├── submit_paste_languages.html
│ │ └── submit_paste_tabs.html
│ └── latest_pastes
│ │ └── latest_pastes.html
├── migrations
│ └── __init__.py
├── models.py
├── templates
│ ├── home
│ │ ├── faq.html
│ │ ├── home.html
│ │ ├── latest_pastes.html
│ │ ├── submit_paste_form.html
│ │ └── submit_paste_tabs.html
│ └── latest_pastes
│ │ └── latest_pastes.html
├── tests.py
├── urls.py
└── views.py
├── manage.py
├── pastebin
├── .directory
├── __init__.py
├── debug_settings.py
├── jinja2.py
├── jinja_globals.py
├── manager.py
├── middleware.py
├── settings.py
├── templatetags
│ ├── __init__.py
│ └── extra_tags.py
├── testcase.py
├── urls.py
├── util.py
└── wsgi.py
├── pastes
├── __init__.py
├── admin.py
├── admin_forms.py
├── admin_views.py
├── forms.py
├── jinja2
│ └── pastes
│ │ ├── edit_paste
│ │ ├── edit_error.html
│ │ └── edit_paste.html
│ │ ├── paste_history
│ │ └── paste_history.html
│ │ ├── remove_paste
│ │ ├── paste_removed.html
│ │ ├── remove_error.html
│ │ └── remove_paste.html
│ │ ├── report_paste
│ │ ├── paste_reported.html
│ │ ├── report_error.html
│ │ └── report_paste.html
│ │ └── show_paste
│ │ ├── show_error.html
│ │ └── show_paste.html
├── migrations
│ ├── 0001_initial.py
│ ├── 0002_paste_encrypted.py
│ ├── 0003_auto_20150525_1612.py
│ ├── 0004_auto_20150601_1634.py
│ ├── 0005_auto_20150601_1642.py
│ ├── 0006_paste_updated.py
│ ├── 0007_auto_20150704_1510.py
│ ├── 0008_pasteversion_encrypted.py
│ ├── 0009_auto_20150731_1327.py
│ ├── 0010_auto_20150731_1746.py
│ └── __init__.py
├── models.py
├── templates
│ └── pastes
│ │ ├── admin
│ │ └── process_report
│ │ │ ├── process.html
│ │ │ ├── process_error.html
│ │ │ └── process_success.html
│ │ ├── edit_paste
│ │ ├── edit_error.html
│ │ └── edit_paste.html
│ │ ├── paste_history
│ │ └── paste_history.html
│ │ ├── remove_paste
│ │ ├── paste_removed.html
│ │ ├── remove_error.html
│ │ └── remove_paste.html
│ │ ├── report_paste
│ │ ├── paste_reported.html
│ │ ├── report_error.html
│ │ └── report_paste.html
│ │ └── show_paste
│ │ ├── show_error.html
│ │ └── show_paste.html
├── tests.py
├── urls.py
└── views.py
├── requirements.txt
├── sql
├── __init__.py
├── add_test_data.sql
├── create_tables.sql
├── cursor.py
├── drop_tables.sql
└── run_sql.sh
├── static
├── css
│ ├── bootstrap-theme.css
│ ├── bootstrap-theme.css.map
│ ├── bootstrap-theme.min.css
│ ├── bootstrap.css
│ ├── bootstrap.css.map
│ ├── bootstrap.min.css
│ ├── pastebin-django.css
│ ├── prism.css
│ └── pygments-style.css
├── fonts
│ ├── glyphicons-halflings-regular.eot
│ ├── glyphicons-halflings-regular.svg
│ ├── glyphicons-halflings-regular.ttf
│ ├── glyphicons-halflings-regular.woff
│ └── glyphicons-halflings-regular.woff2
└── js
│ ├── bootstrap.js
│ ├── bootstrap.min.js
│ ├── jquery.min.js
│ ├── jquery.readmore.min.js
│ ├── jquery.timeago.js
│ ├── linkify-jquery.min.js
│ ├── linkify.min.js
│ ├── npm.js
│ ├── pastebin-comments.js
│ ├── pastebin-controls.js
│ ├── pastebin-decrypt.js
│ ├── pastebin-favorite.js
│ ├── pastebin-submit.js
│ ├── prism.js
│ └── sjcl.js
├── templates
├── base.html
├── form.html
├── navbar.html
├── page_footer.html
└── pagination.html
├── templates_jinja2
├── base.html
├── form.html
├── navbar.html
├── page_footer.html
└── pagination.html
└── users
├── __init__.py
├── admin.py
├── forms.py
├── jinja2
└── users
│ ├── login
│ ├── logged_in.html
│ └── login.html
│ ├── logout
│ └── logged_out.html
│ ├── profile
│ ├── favorites
│ │ ├── favorites.html
│ │ └── favorites_hidden.html
│ ├── home
│ │ ├── home.html
│ │ ├── home_favorites.html
│ │ └── home_pastes.html
│ ├── pastes
│ │ └── pastes.html
│ ├── profile.html
│ ├── profile_error.html
│ ├── profile_favorites.html
│ ├── profile_navbar.html
│ └── profile_pastes.html
│ ├── register
│ ├── already_logged_in.html
│ ├── register.html
│ ├── register_error.html
│ └── register_success.html
│ └── settings
│ ├── change_email_address
│ └── change_email_address.html
│ ├── change_password
│ └── change_password.html
│ ├── change_preferences
│ └── change_preferences.html
│ ├── delete_account
│ ├── account_deleted.html
│ └── delete_account.html
│ └── settings_error.html
├── migrations
├── 0001_initial.py
├── 0002_sitesettings.py
└── __init__.py
├── models.py
├── templates
└── users
│ ├── login
│ ├── logged_in.html
│ └── login.html
│ ├── logout
│ └── logged_out.html
│ ├── profile
│ ├── favorites
│ │ ├── favorites.html
│ │ └── favorites_hidden.html
│ ├── home
│ │ ├── home.html
│ │ ├── home_favorites.html
│ │ └── home_pastes.html
│ ├── pastes
│ │ └── pastes.html
│ ├── profile.html
│ ├── profile_error.html
│ ├── profile_favorites.html
│ ├── profile_navbar.html
│ └── profile_pastes.html
│ ├── register.html
│ ├── register
│ ├── already_logged_in.html
│ ├── register.html
│ └── register_success.html
│ └── settings
│ ├── change_password
│ └── change_password.html
│ ├── change_preferences
│ └── change_preferences.html
│ ├── delete_account
│ ├── account_deleted.html
│ └── delete_account.html
│ └── settings_error.html
├── tests.py
├── urls.py
└── views.py
/.directory:
--------------------------------------------------------------------------------
1 | [Dolphin]
2 | Timestamp=2015,3,12,15,24,49
3 | Version=3
4 |
5 | [Settings]
6 | HiddenFilesShown=true
7 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Created by https://www.gitignore.io
2 |
3 | ### Python ###
4 | # Byte-compiled / optimized / DLL files
5 | __pycache__/
6 | *.py[cod]
7 |
8 | # C extensions
9 | *.so
10 |
11 | # Distribution / packaging
12 | .Python
13 | env/
14 | build/
15 | develop-eggs/
16 | dist/
17 | downloads/
18 | eggs/
19 | .eggs/
20 | lib/
21 | lib64/
22 | parts/
23 | sdist/
24 | var/
25 | *.egg-info/
26 | .installed.cfg
27 | *.egg
28 |
29 | # PyInstaller
30 | # Usually these files are written by a python script from a template
31 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
32 | *.manifest
33 | *.spec
34 |
35 | # Installer logs
36 | pip-log.txt
37 | pip-delete-this-directory.txt
38 |
39 | # Unit test / coverage reports
40 | htmlcov/
41 | .tox/
42 | .coverage
43 | .coverage.*
44 | .cache
45 | nosetests.xml
46 | coverage.xml
47 |
48 | # Translations
49 | *.mo
50 | *.pot
51 |
52 | # Django stuff:
53 | *.log
54 |
55 | # Sphinx documentation
56 | docs/_build/
57 |
58 | # PyBuilder
59 | target/
60 |
61 |
62 | ### Django ###
63 | *.log
64 | *.pot
65 | *.pyc
66 | *.sqlite3
67 | __pycache__/
68 | local_settings.py
69 |
70 |
71 | ### VirtualEnv ###
72 | # Virtualenv
73 | # http://iamzed.com/2009/05/07/a-primer-on-virtualenv/
74 | .Python
75 | [Bb]in
76 | [Ii]nclude
77 | [Ll]ib
78 | [Ll]ocal
79 | [Ss]cripts
80 | pyvenv.cfg
81 | pip-selfcheck.json
82 |
--------------------------------------------------------------------------------
/INSTALL.md:
--------------------------------------------------------------------------------
1 | INSTALLING AND RUNNING PASTEBIN-DJANGO
2 | ===
3 | These steps explain how to get pastebin-django working in such a way that it can be launched using the provided manage.py script (which is unsuitable for production use!), the database connection works correctly, etc. There are multiple ways to run Django projects in a production environment, although for pastesite.matoking.com I've used uWSGI with nginx. Instructions for running a Django application with that stack can be found here:
4 | https://uwsgi-docs.readthedocs.org/en/latest/tutorials/Django_and_nginx.html
5 |
6 |
7 | Installing dependencies
8 | --
9 | pastebin-django requires Python and a few related dependencies to be installed (virtualenv, pip). The following command should install the required dependencies if you are running on Debian or a derivative (eg. Linux Mint, Ubuntu).
10 |
11 | sudo apt-get install python python-dev python-pip python-virtualenv
12 |
13 | Creating virtualenv container and installing required Python libraries
14 | --
15 | Although this step is optional, it's recommended to install and run the web application inside a virtualenv environment, as this isolates the web application's environment from the system-wide Python installation, thus ensuring that your web application won't be accidentally broken by a system-wide update.
16 |
17 | To create the virtualenv environment, run the following command on the pastebin-django directory, which contains the project's apps such as pastes, comments.
18 |
19 | virtualenv pastebin-django
20 |
21 | Once you have created the virtualenv environment, you can start using it by running the following command.
22 |
23 | source bin/activate
24 |
25 | You can always deactivate the virtualenv environment by running the following command.
26 |
27 | deactivate
28 |
29 | But instead of leaving the environment, let's install the required Python libraries using pip. cd inside the pastebin-django directory and install the required Python libraries. Note that sudo isn't necessary, as we are installing all of the libraries inside our isolated Python environment.
30 |
31 | cd pastebin-django
32 | pip install -r requirements.txt
33 |
34 | Configuring the PostgreSQL database
35 | --
36 | We'll assume you have already created a database and a role which can access the said database. Start by opening the settings.py file in pastebin/settings.py and changing the credentials in DATABASES['default']. If you're going to be running unit tests, you can change the database name in DATABASES['default']['TEST']['NAME'], which is the database that will be used when running the unit tests.
37 |
38 | After this is done, run the following command in the root of your virtualenv environment to create Django's in-built database tables. You may also be prompted to create a superuser, which you can use when logging into pastebin-django.
39 |
40 | python manage.py syncdb
41 |
42 | Configuring the Redis instance
43 | --
44 | pastebin-django uses a data structure server to both to store persistent data that wouldn't be a good fit for a relational database (eg. paste hit counts). You can install Redis on Debian or a derivative using the following command.
45 |
46 | sudo apt-get install redis-server
47 |
48 | By default Redis runs on port 6379 and saves its data regularly. However, pastebin-django's default settings assume a persistent Redis storage runs on the port 6380, so you may need to change the port for the 'persistent' cache in settings.py to match this port. You can also run a non-persistent Redis server under the port 6379 and a persistent Redis server under port 6380, which matches the default settings.
49 |
50 | Running the unit tests
51 | --
52 | At this point your web application should be configured correctly. But to make sure that everything will work nicely before we try running the web application, run the unit tests using the following command. You can use your "normal" database when running the unit tests, but you'll need to recreate the tables described in sql/create_tables.sql after running the tests, as those will be automatically dropped.
53 |
54 | python manage.py test
55 |
56 | If everything worked as intended, all of the tests should pass which means the web application <--> database connection is working correctly.
57 |
58 | Starting the development web server
59 | --
60 | We are now ready to start the development web server. Run the following command to run the web application on 127.0.0.1:8000, which is also the URL you'll need to enter into your web browser in order to access the site. Feel free to change the address and/or port depending on your working environment.
61 |
62 | python manage.py runserver 127.0.0.1:8000
63 |
64 | Now, try opening http://127.0.0.1:8000 in your web browser. If everything worked out correctly, you should now be able to use the web application as normal.
65 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | pastebin-django
2 | ===
3 | A pastebin web application developed in Django featuring plenty of features, including:
4 |
5 | * User registration, allowing pastes to be updated and removed
6 | * Syntax highlighting (server-side Pygments used for unencrypted pastes, client-side Prism JS library for encrypted pastes)
7 | * Paste encryption using Stanford Javascript Crypto Library
8 | * Hidden pastes
9 | * Paste versioning and history
10 | * Feature to report pastes to site administrators
11 | * Paste favoriting
12 | * Paste comments
13 |
14 | Looking for the old version of pastebin-django as it was developed for Tsoha2015? [Check it out here.](https://github.com/Matoking/pastebin-django/tree/tsoha)
15 |
16 | Credits
17 | --
18 | pastebin-django is built on the Django web framework
19 |
20 | [Django](https://www.djangoproject.com/)
21 |
22 | and it uses the following JavaScript libraries
23 |
24 | [Stanford Javascript Crypto Library](https://github.com/bitwiseshiftleft/sjcl)
25 | [Prism](http://prismjs.com/)
26 | [JQuery](http://jquery.com/)
27 | [Timeago](http://timeago.yarp.com/)
28 | [Readmore.js](http://jedfoster.com/Readmore.js/)
29 |
--------------------------------------------------------------------------------
/UNLICENSE:
--------------------------------------------------------------------------------
1 | This is free and unencumbered software released into the public domain.
2 |
3 | Anyone is free to copy, modify, publish, use, compile, sell, or
4 | distribute this software, either in source code form or as a compiled
5 | binary, for any purpose, commercial or non-commercial, and by any
6 | means.
7 |
8 | In jurisdictions that recognize copyright laws, the author or authors
9 | of this software dedicate any and all copyright interest in the
10 | software to the public domain. We make this dedication for the benefit
11 | of the public at large and to the detriment of our heirs and
12 | successors. We intend this dedication to be an overt act of
13 | relinquishment in perpetuity of all present and future rights to this
14 | software under copyright law.
15 |
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22 | OTHER DEALINGS IN THE SOFTWARE.
23 |
24 | For more information, please refer to
", "5 |23 | -------------------------------------------------------------------------------- /home/jinja2/home/submit_paste_tabs.html: -------------------------------------------------------------------------------- 1 |") 33 | 34 | return result -------------------------------------------------------------------------------- /highlighting/formatter.py: -------------------------------------------------------------------------------- 1 | from pygments.formatters import HtmlFormatter 2 | 3 | class ListHtmlFormatter(HtmlFormatter): 4 | """ 5 | Wraps the code inside anelement and each individual line around a
- element, 6 | giving us both free line numbers and better behavior with line wrapping. 7 | 8 | This imitates how GeSHi renders its highlighted code. 9 | """ 10 | def wrap(self, source, outfile): 11 | return self._wrap_ol(source) 12 | 13 | def _wrap_ol(self, source): 14 | yield 0, '
' 15 | for i, t in source: 16 | if i == 1: 17 | t = '
' -------------------------------------------------------------------------------- /highlighting/get_languages.py: -------------------------------------------------------------------------------- 1 | """ 2 | Iterate through all languages supported by Pygments and print a sorted list of languages 3 | 4 | This can then be copied into settings.py 5 | """ 6 | from pygments.lexers import get_all_lexers 7 | import operator 8 | 9 | languages = {} 10 | 11 | for lexer in get_all_lexers(): 12 | if lexer[1][0] != "text": 13 | languages[lexer[1][0]] = lexer[0] 14 | 15 | sorted_list = sorted(languages.items(), key=operator.itemgetter(0)) 16 | 17 | # Add "text only" at the beginning 18 | sorted_list.insert(0, ("text", "Text only")) 19 | 20 | print(sorted_list) -------------------------------------------------------------------------------- /home/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Matoking/pastebin-django/5e38637e5a417ab907a353af8544f64a0ad2b127/home/__init__.py -------------------------------------------------------------------------------- /home/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | # Register your models here. 4 | -------------------------------------------------------------------------------- /home/jinja2/home/faq.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block title %}Frequently asked questions - pastebin-django{% endblock %} 4 | 5 | {% block content %} 6 |- ' 18 | yield i, t 19 | yield 0, '
' + t + '7 |39 | {% endblock content %} -------------------------------------------------------------------------------- /home/jinja2/home/home.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block content %} 4 |8 |38 |9 |37 |10 |12 |Frequently asked questions
11 |13 | What is pastebin-django?
16 |
14 | pastebin-django is a site that allows you to store 'pastes', short text snippets. 15 |17 | What is the syntax highlighting feature?
20 |
18 | If your paste contains code or markup, you can use the syntax highlighting to highlight the text. Note that encrypted pastes don't support all of the syntax highlighting formats that are available with unencrypted pastes. 19 |21 | How does the encryption feature work?
24 |
22 | Your pastes can be encrypted to ensure only people you trust will be able to read them. Encrypting your paste means you need to provide the same password you used to encrypt paste to decrypt and thus read it. Since the encryption and decryption are done locally on your computer, the administrators of this site won't be able to recover the content of your encrypted paste if you lose your password. 23 |25 | How does the paste history feature work?
28 |
26 | If you have uploaded your paste while logged in, you can update your paste later on. Paste history means the earlier versions of your paste remain available. 27 |29 | Can I comment on pastes?
32 |
30 | Yes, if you have registered you can comment on pastes. 31 |33 | What software does this site run on?
36 |
34 | This pastebin site runs on pastebin-django, a web application developed using the Django web framework. 35 |5 |17 | {% endblock %} 18 | {% block extra_js %} 19 | 20 | 21 | {% endblock %} -------------------------------------------------------------------------------- /home/jinja2/home/latest_pastes.html: -------------------------------------------------------------------------------- 1 |6 |16 |7 |12 |8 |10 | {% include "home/submit_paste_form.html" %} 11 |Upload a new paste
9 |13 | {% include "home/latest_pastes.html" %} 14 |15 |2 |4 | {% if latest_pastes %} 5 |Latest pastes
3 |6 | 7 |
21 | {% else %} 22 |8 | 11 | 12 | 13 | {% for paste in latest_pastes %} 14 |Title 9 |Age 10 |15 | 18 | {% endfor %} 19 | 20 |{{ paste.title|truncate(32) }} 16 |{{ seconds_to_str(timesince_in_seconds(paste.submitted)) }} 17 |No pastes have been submitted yet. :(
23 | {% endif %} -------------------------------------------------------------------------------- /home/jinja2/home/submit_paste_form.html: -------------------------------------------------------------------------------- 1 |
You are uploading this paste as user {{ request.user.get_username() }}
13 | {% endif %} 14 |You can encrypt your paste to prevent people from viewing the content of your paste unless a correct password is provided. The encryption and decryption are performed client-side, meaning we never receive an unencrypted copy of the paste.
28 |Note the following:
29 |Title | 17 |Age | 18 | {% if request.user.is_staff %} 19 |Actions | 20 | {% endif %} 21 |
---|---|---|
{{ paste.title|truncate(64) }} | 27 |{{ seconds_to_str(timesince_in_seconds(paste.submitted)) }} | 28 | {% if request.user.is_staff %} 29 |30 | Edit 31 | Remove 32 | | 33 | {% endif %} 34 |
13 | What is pastebin-django?
14 | pastebin-django is a site that allows you to store 'pastes', short text snippets.
15 |
17 | What is the syntax highlighting feature?
18 | If your paste contains code or markup, you can use the syntax highlighting to highlight the text. Note that encrypted pastes don't support all of the syntax highlighting formats that are available with unencrypted pastes.
19 |
21 | How does the encryption feature work?
22 | Your pastes can be encrypted to ensure only people you trust will be able to read them. Encrypting your paste means you need to provide the same password you used to encrypt paste to decrypt and thus read it. Since the encryption and decryption are done locally on your computer, the administrators of this site won't be able to recover the content of your encrypted paste if you lose your password.
23 |
25 | How does the paste history feature work?
26 | If you have uploaded your paste while logged in, you can update your paste later on. Paste history means the earlier versions of your paste remain available.
27 |
29 | Can I comment on pastes?
30 | Yes, if you have registered you can comment on pastes.
31 |
33 | What software does this site run on?
34 | This pastebin site runs on pastebin-django, a web application developed using the Django web framework.
35 |
Title | 10 |Age | 11 |
---|---|
{{ paste.title|truncatechars:64 }} | 17 |{{ paste.submitted|naturaltime }} | 18 |
No pastes have been submitted yet. :(
24 | {% endif %} -------------------------------------------------------------------------------- /home/templates/home/submit_paste_form.html: -------------------------------------------------------------------------------- 1 |You are uploading this paste as user {{ user.get_username }}
13 | {% endif %} 14 |You can encrypt your paste to prevent people from viewing the content of your paste unless a correct password is provided. The encryption and decryption are performed client-side, meaning we never receive an unencrypted copy of the paste.
27 |Note the following:
28 |Title | 18 |Age | 19 | {% if user.is_staff %} 20 |Actions | 21 | {% endif %} 22 |
---|---|---|
{{ paste.title|truncatechars:64 }} | 28 |{{ paste.submitted|naturaltime }} | 29 | {% if user.is_staff %} 30 |31 | Edit 32 | Remove 33 | | 34 | {% endif %} 35 |
Title | 15 |Note | 16 |Updated | 17 |
---|---|---|
{{ version.title|truncate(64) }} | 23 |{% if version.note %}{{ version.note }}{% else %}No note provided{% endif %} | 24 |{{ seconds_to_str(timesince_in_seconds(version.submitted)) }} | 25 |
{{ removal_reason }}
25 | {% endif %} 26 |The reports were marked as checked and ignored.
6 | {% elif action == "remove" %} 7 |The paste(s) were removed.
8 | {% elif action == "delete" %} 9 |The paste(s) were deleted permanently.
10 | {% endif %} 11 |Title | 16 |Note | 17 |Updated | 18 |
---|---|---|
{{ version.title|truncatechars:64 }} | 24 |{% if version.note %}{{ version.note }}{% else %}No note provided{% endif %} | 25 |{{ version.submitted|naturaltime }} | 26 |
{{ removal_reason }}
25 | {% endif %} 26 |{{ error|escape }}
22 | {% endfor %} 23 | {% if field.help_text %} 24 |{{ field.help_text }}
25 | {% endif %} 26 |{{ error|escape }}
27 | {% endfor %} 28 | {% if field.help_text %} 29 |{{ field.help_text|safe }}
30 | {% endif %} 31 |Title | 10 |Added | 11 | {% if profile_user == request.user %} 12 |Actions | 13 | {% endif %} 14 |
---|---|---|
{{ favorite.paste.title|truncate(128) }} | 20 |{{ favorite.added }} | 21 | {% if profile_user == request.user %} 22 |23 | 29 | | 30 | {% endif %} 31 |
Title | 16 |
---|
{{ favorite.paste.title|truncate(64) }} | 22 |
Title | 11 |Age | 12 |
---|---|
{{ paste.title|truncate(32) }} | 18 |{{ seconds_to_str(timesince_in_seconds(paste.submitted)) }} | 19 |
Title | 10 |Uploaded | 11 | {% if profile_user == request.user %} 12 |Actions | 13 | {% endif %} 14 |
---|---|---|
{{ paste.title|truncate(128) }} | 20 |{{ paste.submitted }} | 21 | {% if profile_user == request.user %} 22 |23 | Edit 24 | Remove 25 | | 26 | {% endif %} 27 |
Title | 13 |Age | 14 |
---|---|
{{ paste.title|truncate(32) }} | 20 |{{ seconds_to_str(timesince_in_seconds(paste.submitted)) }} | 21 |
Title | 6 |Age | 7 |
---|---|
{{ paste.title|truncate(32) }} | 13 |{{ seconds_to_str(timesince_in_seconds(paste.submitted)) }} | 14 |
Title | 10 |Added | 11 | {% if profile_user == request.user %} 12 |Actions | 13 | {% endif %} 14 |
---|---|---|
{{ favorite.paste.title|truncatechars:128 }} | 20 |{{ favorite.added }} | 21 | {% if profile_user == request.user %} 22 |23 | 29 | | 30 | {% endif %} 31 |
Title | 17 |
---|
{{ favorite.paste.title|truncatechars:64 }} | 23 |
Title | 12 |Age | 13 |
---|---|
{{ paste.title|truncatechars:32 }} | 19 |{{ paste.submitted|naturaltime }} | 20 |
Title | 10 |Uploaded | 11 | {% if profile_user == request.user %} 12 |Actions | 13 | {% endif %} 14 |
---|---|---|
{{ paste.title|truncatechars:128 }} | 20 |{{ paste.submitted }} | 21 | {% if profile_user == request.user %} 22 |23 | Edit 24 | Remove 25 | | 26 | {% endif %} 27 |
Title | 7 |Age | 8 |
---|---|
{{ paste.title|truncatechars:32 }} | 14 |{{ paste.submitted|naturaltime }} | 15 |
Title | 7 |Age | 8 |
---|---|
{{ paste.title|truncatechars:32 }} | 14 |{{ paste.submitted|naturaltime }} | 15 |
Post a comment
5 |