This is a work in progress, answering questions that do indeed get asked frequently on the [irc://irc.freenode.net/django Django IRC channel] (#django on irc.freenode.net). Feel free to contribute, but try to keep it clear and concise. Please don't editorialize. There's also a helpful [http://www.djangoproject.com/documentation/faq/ official FAQ]. [[TOC]] = General Tips = * When asking for help in the channel, '''be as specific as possible''' in your request. "It doesn't work" is not sufficiently specific! * Standard problem-reporting advice: Describe 1) what you did, 2) what you expected to happen, and 3) what actually happened. * General problem-'''solving''' advice: Test all the things you think are true until you find the one that isn't. * Showing actual code is useful. For code longer than a line or two, use the pastebin: http://dpaste.com/ * Django has very good [http://www.djangoproject.com/documentation/ documentation]. Make sure you've checked it! = Python questions = == How do I learn Python if I'm new to programming? == #LearnPython1 * http://www.ibiblio.org/obp/thinkCSpy/ * http://wiki.python.org/moin/BeginnersGuide/NonProgrammers == How do I learn Python if I'm '''not''' new to programming? == #LearnPython2 * http://docs.python.org/tut/tut.html * http://www.diveintopython.org/ * http://wiki.python.org/moin/BeginnersGuide/Programmers == Are there any books on Python? == #PythonBooks Yes. http://wiki.python.org/moin/PythonBooks = Django questions = == Which version should I use, the 0.96 release or the Subversion checkout? == #WhichVersion The 0.96 release is well-tested and stable, and is best for production deployments. Tracking the development version of Django through a Subversion checkout can be nice if there's a new feature you really want, but does require you to pay more attention to what's going on in Django development -- if a backwards-incompatible change is introduced, you'll need to be watching the development timeline to notice it and change your code to suit, where sticking to official releases means that you get a list of any changes you need to make in the release notes. All backwards incompatible changes are (or should be) also recorded on the BackwardsIncompatibleChanges wiki page. Let us know (file a ticket) if you notice any genuine backwards incompatibilities that are missing. There will be several backwards-incompatible changes before the next release of Django (for example, the workings of the admin app will be changing), so it's officially recommended that production deployments stick to the 0.96 release until the next release is ready. == Should I read the documentation on the djangoproject.com website, or djangobook.com? == #WhichDocs Start with the [http://www.djangoproject.com/documentation/ documentation] here, and then have a look at the book if you're interested; the documentation on djangoproject.com includes the official tutorial, and a number of comprehensive references which aren't currently available in the book. == What does `'function' object has no attribute 'rindex'` mean? == #WeirdError1 This error is a telltale sign that you're trying to use examples in the Django book with an older version of Django -- the book includes examples which rely on features introduced in Django 0.96. == How do I extend a model? I want to subclass django.contrib.auth.models.User. == #ModelSubclassing You can't do this at the moment, but model subclassing is being worked on. Also, see here http://www.b-list.org/weblog/2007/02/20/about-model-subclassing and here for instructions on extending the User model: http://www.djangobook.com/en/beta/chapter12/#cn226 == If I change my model, will {{{manage.py syncdb}}} update my database table? == #ModelChanges No, you'll need to manually change your database table. If you use `manage.py sqlall` on your app to produce a SQL file before editing your models, you can run it again afterwards and use the difference between the two to see what you need to change in the database. == What should I use for development -- the built-in server, mod_python, FastCGI? == #WhichServer It's generally easiest to use the built-in development server, since it automatically reloads your Python source files when it detects changes. (Some prefer to replicate the production environment as closely as possible, meaning that if their deployed project uses mod_python then their development server does as well.) == What's the difference between {{{null=True}}} and {{{blank=True}}} in models? == #NullVsBlank `null=True` means that the database will accept a `NULL` value for that field; `blank=True` means that Django's validation system won't complain about a missing value. If you use `blank=True` but ''not'' `null=True` you will need to have your code fill in a value before storage in the database -- specifying a default on a field, or putting something in the model's `save` method to generate a value are two good ways to handle this, and can be extremely useful when you want to calculate one field's value based on others. == I think Ajax is awesome! How do I do Ajax with Django? == #Ajax Choose your favorite excellent Javascript library and go to it. Django provides serializers to JSON and XML, which you can read about in the documentation: http://www.djangoproject.com/documentation/serialization/ Also see this helpful article from James Bennett (with bonus anti-Javascript-helpers rant!): http://www.b-list.org/weblog/2006/07/02/django-and-ajax == Is there a free CMS available for Django? == #CMS At this point there is nothing well-established (like Plone, for instance). In practice, people mean so many different things by "CMS" that it may be hard to get a straight answer. This question is often asked by newcomers; one recommendation is to learn a bit of Django and see just how easy it is to make a site that does what you want. If you're in a big rush, there's always Ellington: http://www.ellingtoncms.com/ == What database should I use? == #WhichDB For development, most people find SQLite to be fastest and simplest to run with -- just make sure the database file and its directory are writeable by the owner of the web server process. For production, PostgreSQL and MySQL are the most thoroughly-tested of the databases Django supports, but it's best to choose based on the needs of your applications; for example, applications which do very little writing of data to the DB will enjoy the speed of SQLite, but applications which involve many complex queries or which require robust concurrent-write features like transaction isolation will probably want to look at Postgres or MySQL (and, of course, MySQL is often handy simply because many shared hosting providers have it set up by default). == The admin is working, but it can't find the Javascript and CSS and image files. == #AdminFiles You're running the development server, right? Read this: http://www.djangoproject.com/documentation/static_files/ == I'm trying to install Django on Windows and something is weird. == #Windows Have you looked here? http://code.djangoproject.com/wiki/WindowsInstall == What editor is best for Django? == #WhichEditor [wiki:UsingVimWithDjango Vim]. No, wait, [wiki:Emacs Emacs]. A lot of people seem to like TextMate, too. == How do I customise the admin interface so all logged-in users can use it without screwing up anything? == #AllUsersAdmin The admin interface is designed for use by trusted site staff, not by any user -- if you don't trust a user with the level of access the admin application provides, you'll need to provide non-admin views for the actions you'd like to allow them to take. == How do I make extensive changes in the admin interface? == #ExtensiveChangesAdmin At the moment it's probably best not to; the admin app is fairly specialized and doesn't have a lot of places to customize behavior, so you'll usually end up writing less code by just rolling your own set of views. The newforms-admin branch, however, will significantly refactor the admin app to make customization much simpler. == I have created several users, but only the superuser is able to log into the admin == #OrdinaryUserCantLoginAdmin In .95 and prior releases, you cannot put a plain password when creating a new user in admin -- the form expects a hashed password in the format which will be stored in the database. In Django 0.96 and later, this is not a problem. Also, keep in mind that admin access requires the "is_active" and "is_staff" boxes to be checked for the user. == When will the next release be out? -or- When will X branch be done? == #AreWeThereYet "When it's done" is the short answer. Fixed release dates are rarely set, but searching or browsing the developer list (http://groups.google.com/group/django-developers/) can be informative. If you always want to run with the bleeding-edge, just use the SVN trunk rather than the last release (it's kept stable and is updated nearly every day). == I want to repeat a bit of dynamic information (eg from a database) on many views. Do I have to change every view? == No, you can use an [http://www.djangoproject.com/documentation/templates_python/#inclusion-tags inclusion tag]. == Why isn't my template tag or filter working? == #TemplateTagsAndFilters Of course, you've read the [http://www.djangoproject.com/documentation/templates_python/#extending-the-template-system documentation], right? Here's a brief list of things to check first before asking: * your filter/tag should be in a file named something like `[yourfilterlibraryname].py` (e.g. if it was `myfilter.py`, you'll use `{% load myfilter %}` in the template) * that file exists in a directory named `templatetags` and this directory is sitting inside of an ''app'' directory (e.g. `.../projectdir/appdir/templatetags`) * an empty file named `__init__.py` also exists in the `templatetags` directory (this makes the directory into a python module which can be imported) * in your project `settings.py`, the application where the `templatetags` directory is contained is in `INSTALLED_APPS` * each filter or tag in your library is decorated correctly (see docs) * neither your library nor anything it imports raises any exceptions (for example, if your library tries to import something that's not installed, and so raises an `ImportError`, that will prevent Django from seeing it) == I'm using Ubuntu Feisty Fawn and I get an error while using the tutorial == Feisty Fawn ships with Python 2.5.1-c1. Just run {{{apt-get update}}} and {{{apt-get install python2.5}}} should fix those problems. == I want to have some code run when the server/application starts. How do I do that? == Both mod_python and FastCGI are structured in such a way that there's no such thing as "application startup" or "server startup"; the best solution is to place your "startup" code somewhere that's guaranteed to be imported early on in the request/response cycle (the `__init__.py` file of your project, or of a specific application you're using, can be a good place, because Python will execute code found there the first time it has to import the module; just be aware that referencing the same module in different ways, say by doing `from myproject.myapp import foo` in one place, and `from myapp import foo` in another, will cause that code to be executed once for each different way you import it). == I have a `DateField` or `DateTimeField` with a default value of `now()`, but it's not working! == What you've probably done is something like this: {{{ some_date_field = models.DateTimeField(default=datetime.datetime.now()) }}} When you do that you're immediately calling `datetime.datetime.now` and passing its return value -- ''at the moment the class is defined'' -- to be the default, which means it will not change during the life of a server process. What you want to do instead is this: {{{ some_date_field = models.DateTimeField(default=datetime.datetime.now) }}} Note that there are no parentheses on `datetime.datetime.now` in this version, so you're passing ''the function itself'' to be the default. When Django receives a function as a default value for a model field, it will call the function each time a new object is saved, and that will correctly generate the current date/time for each object. == I'm trying to use {{{__str__()}}} or {{{__unicode__()}}} on my model, but it's not working == #StrVsUnicode It's likely that you're using {{{__str__()}}} with the development version of Django, or {{{__unicode__()}}} with a release version. After the release of 0.96, Django's internals became fully Unicode aware. As a result, model classes that used to use {{{__str__()}}} to provide string versions of themselves need to be updated to use {{{__unicode__()}}} to work with the development version of Django. However, users of a Django release still need to use {{{__str__()}}}. More information on exactly what changed regarding Unicode in Django is available on the UnicodeBranch page. == Have you Searched? == * [22:30] 1. Go to http://code.djangoproject.com/ * [22:30] 2. Type "{{ your problem }}" into the search box * [22:30] 3. Hit Enter * [22:30] Then the very first ticket that comes up in the results is this: {{ an answer }} * [22:30] And answers your question.