Skip to content

Commit

Permalink
A bunch of cleanups to file documentation. Along the way some referen…
Browse files Browse the repository at this point in the history
…ces to the old file methods were removed - thanks, varikin.

Fixes #8642.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@8862 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information
jacobian committed Sep 2, 2008
1 parent c1de41f commit bc768e2
Show file tree
Hide file tree
Showing 3 changed files with 108 additions and 103 deletions.
39 changes: 21 additions & 18 deletions docs/faq/usage.txt
Expand Up @@ -45,21 +45,24 @@ Django database layer.
How do I use image and file fields? How do I use image and file fields?
----------------------------------- -----------------------------------


Using a ``FileField`` or an ``ImageField`` in a model takes a few steps: Using a :class:`~django.db.models.FileField` or an

:class:`~django.db.models.ImageField` in a model takes a few steps:
#. In your settings file, define ``MEDIA_ROOT`` as the full path to
a directory where you'd like Django to store uploaded files. (For #. In your settings file, you'll need to define :setting:`MEDIA_ROOT` as the
performance, these files are not stored in the database.) Define full path to a directory where you'd like Django to store uploaded files.
``MEDIA_URL`` as the base public URL of that directory. Make sure that (For performance, these files are not stored in the database.) Define
this directory is writable by the Web server's user account. :setting:`MEDIA_URL` as the base public URL of that directory. Make sure

that this directory is writable by the Web server's user account.
#. Add the ``FileField`` or ``ImageField`` to your model, making sure
to define the ``upload_to`` option to tell Django to which subdirectory #. Add the :class:`~django.db.models.FileField` or
of ``MEDIA_ROOT`` it should upload files. :class:`~django.db.models.ImageField` to your model, making sure to

define the :attr:`~django.db.models.FileField.upload_to` option to tell
#. All that will be stored in your database is a path to the file Django to which subdirectory of :setting:`MEDIA_ROOT` it should upload
(relative to ``MEDIA_ROOT``). You'll most likely want to use the files.
convenience ``get_<fieldname>_url`` function provided by Django. For
example, if your ``ImageField`` is called ``mug_shot``, you can get the #. All that will be stored in your database is a path to the file
absolute URL to your image in a template with (relative to :setting:`MEDIA_ROOT`). You'll most likely want to use the
``{{ object.get_mug_shot_url }}``. convenience :attr:`~django.core.files.File.url` attribute provided by
Django. For example, if your :class:`~django.db.models.ImageField` is
called ``mug_shot``, you can get the absolute URL to your image in a
template with ``{{ object.mug_shot.url }}``.
139 changes: 70 additions & 69 deletions docs/ref/files/file.txt
Expand Up @@ -12,109 +12,110 @@ The ``File`` object


Django's ``File`` has the following attributes and methods: Django's ``File`` has the following attributes and methods:


``File.path`` .. attribute:: File.name
~~~~~~~~~~~~~


The absolute path to the file's location on a local filesystem. The name of file including the relative path from :setting:`MEDIA_ROOT`.


:ref:`Custom file storage systems <howto-custom-file-storage>` may not store .. attribute:: File.path
files locally; files stored on these systems will have a ``path`` of ``None``.


``File.url`` The absolute path to the file's location on a local filesystem.
~~~~~~~~~~~~


The URL where the file can be retrieved. This is often useful in :ref:`templates :ref:`Custom file storage systems <howto-custom-file-storage>` may not store
<topics-templates>`; for example, a bit of a template for displaying a ``Car`` files locally; files stored on these systems will have a ``path`` of
(see above) might look like:: ``None``.


<img src='{{ car.photo.url }}' alt='{{ car.name }}' /> .. attribute:: File.url


``File.size`` The URL where the file can be retrieved. This is often useful in
~~~~~~~~~~~~~ :ref:`templates <topics-templates>`; for example, a bit of a template for
displaying a ``Car`` (see above) might look like:

.. code-block:: html+django


The size of the file in bytes. <img src='{{ car.photo.url }}' alt='{{ car.name }}' />


``File.open(mode=None)`` .. attribute:: File.size
~~~~~~~~~~~~~~~~~~~~~~~~


Open or reopen the file (which by definition also does ``File.seek(0)``). The The size of the file in bytes.
``mode`` argument allows the same values as Python's standard ``open()``.


When reopening a file, ``mode`` will override whatever mode the file was .. method:: File.open(mode=None)
originally opened with; ``None`` means to reopen with the original mode.


``File.read(num_bytes=None)`` Open or reopen the file (which by definition also does ``File.seek(0)``).
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The ``mode`` argument allows the same values as Python's standard
``open()``.


Read content from the file. The optional ``size`` is the number of bytes to When reopening a file, ``mode`` will override whatever mode the file was
read; if not specified, the file will be read to the end. originally opened with; ``None`` means to reopen with the original mode.


``File.__iter__()`` .. method:: File.read(num_bytes=None)
~~~~~~~~~~~~~~~~~~~


Iterate over the file yielding one line at a time. Read content from the file. The optional ``size`` is the number of bytes to
read; if not specified, the file will be read to the end.


``File.chunks(chunk_size=None)`` .. method:: File.__iter__()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Iterate over the file yielding "chunks" of a given size. ``chunk_size`` defaults Iterate over the file yielding one line at a time.
to 64 KB.


This is especially useful with very large files since it allows them to be .. method:: File.chunks(chunk_size=None)
streamed off disk and avoids storing the whole file in memory.


``File.multiple_chunks(chunk_size=None)`` Iterate over the file yielding "chunks" of a given size. ``chunk_size``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ defaults to 64 KB.


Returns ``True`` if the file is large enough to require multiple chunks to This is especially useful with very large files since it allows them to be
access all of its content give some ``chunk_size``. streamed off disk and avoids storing the whole file in memory.


``File.write(content)`` .. method:: File.multiple_chunks(chunk_size=None)
~~~~~~~~~~~~~~~~~~~~~~~


Writes the specified content string to the file. Depending on the storage system Returns ``True`` if the file is large enough to require multiple chunks to
behind the scenes, this content might not be fully committed until ``close()`` access all of its content give some ``chunk_size``.
is called on the file.


``File.close()`` .. method:: File.write(content)
~~~~~~~~~~~~~~~~


Close the file. Writes the specified content string to the file. Depending on the storage
system behind the scenes, this content might not be fully committed until
``close()`` is called on the file.

.. method:: File.close()

Close the file.


Additional ``ImageField`` attributes Additional ``ImageField`` attributes
------------------------------------ ------------------------------------


``File.width`` and ``File.height`` .. attribute:: File.width
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Width of the image.

.. attribute:: File.height


These attributes provide the dimensions of the image. Heigght of the image.


Additional methods on files attached to objects Additional methods on files attached to objects
----------------------------------------------- -----------------------------------------------


Any ``File`` that's associated with an object (as with ``Car.photo``, above) .. highlight:: pycon
will also have a couple of extra methods:

``File.save(name, content, save=True)``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Saves a new file with the file name and contents provided. This will not replace
the existing file, but will create a new file and update the object to point to
it. If ``save`` is ``True``, the model's ``save()`` method will be called once
the file is saved. That is, these two lines::

>>> car.photo.save('myphoto.jpg', contents, save=False)
>>> car.save()


are the same as this one line:: Any :class:`File` that's associated with an object (as with ``Car.photo``,
above) will also have a couple of extra methods:


>>> car.photo.save('myphoto.jpg', contents, save=True) .. method:: File.save(name, content, save=True)


Note that the ``content`` argument must be an instance of Saves a new file with the file name and contents provided. This will not
:class:`File` or of a subclass of :class:`File`. replace the existing file, but will create a new file and update the object
to point to it. If ``save`` is ``True``, the model's ``save()`` method will
be called once the file is saved. That is, these two lines::

>>> car.photo.save('myphoto.jpg', contents, save=False)
>>> car.save()

are the same as this one line::

>>> car.photo.save('myphoto.jpg', contents, save=True)

Note that the ``content`` argument must be an instance of
:class:`File` or of a subclass of :class:`File`.


``File.delete(save=True)`` .. method:: File.delete(save=True)
~~~~~~~~~~~~~~~~~~~~~~~~~~


Remove the file from the model instance and delete the underlying file. The Remove the file from the model instance and delete the underlying file. The
``save`` argument works as above. ``save`` argument works as above.
33 changes: 17 additions & 16 deletions docs/ref/models/fields.txt
Expand Up @@ -415,20 +415,20 @@ A file-upload field. Has one **required** argument:
.. attribute:: FileField.upload_to .. attribute:: FileField.upload_to


A local filesystem path that will be appended to your :setting:`MEDIA_ROOT` A local filesystem path that will be appended to your :setting:`MEDIA_ROOT`
setting to determine the output of the ``get_<fieldname>_url()`` helper setting to determine the value of the :attr:`~django.core.files.File.url`
function. attribute.


This path may contain `strftime formatting`_, which will be replaced by the This path may contain `strftime formatting`_, which will be replaced by the
date/time of the file upload (so that uploaded files don't fill up the given date/time of the file upload (so that uploaded files don't fill up the given
directory). directory).


.. versionadded:: 1.0 .. versionchanged:: 1.0


This may also be a callable, such as a function, which will be called to This may also be a callable, such as a function, which will be called to
obtain the upload path, including the filename. This callable must be obtain the upload path, including the filename. This callable must be able
able to accept two arguments, and return a Unix-style path (with forward to accept two arguments, and return a Unix-style path (with forward slashes)
slashes) to be passed along to the storage system. The two arguments that will to be passed along to the storage system. The two arguments that will be
be passed are: passed are:


====================== =============================================== ====================== ===============================================
Argument Description Argument Description
Expand Down Expand Up @@ -470,15 +470,15 @@ takes a few steps:
that this directory is writable by the Web server's user account. that this directory is writable by the Web server's user account.


2. Add the :class:`FileField` or :class:`ImageField` to your model, making 2. Add the :class:`FileField` or :class:`ImageField` to your model, making
sure to define the :attr:`~FileField.upload_to` option to tell Django to sure to define the :attr:`~FileField.upload_to` option to tell Django
which subdirectory of :setting:`MEDIA_ROOT` it should upload files. to which subdirectory of :setting:`MEDIA_ROOT` it should upload files.


3. All that will be stored in your database is a path to the file 3. All that will be stored in your database is a path to the file
(relative to :setting:`MEDIA_ROOT`). You'll most likely want to use the (relative to :setting:`MEDIA_ROOT`). You'll most likely want to use the
convenience ``get_<fieldname>_url`` function provided by Django. For convenience :attr:`~django.core.files.File.url` function provided by
example, if your :class:`ImageField` is called ``mug_shot``, you can get Django. For example, if your :class:`ImageField` is called ``mug_shot``,
the absolute URL to your image in a template with ``{{ you can get the absolute URL to your image in a template with
object.get_mug_shot_url }}``. ``{{ object.mug_shot.url }}``.


For example, say your :setting:`MEDIA_ROOT` is set to ``'/home/media'``, and For example, say your :setting:`MEDIA_ROOT` is set to ``'/home/media'``, and
:attr:`~FileField.upload_to` is set to ``'photos/%Y/%m/%d'``. The ``'%Y/%m/%d'`` :attr:`~FileField.upload_to` is set to ``'photos/%Y/%m/%d'``. The ``'%Y/%m/%d'``
Expand All @@ -488,8 +488,9 @@ day. If you upload a file on Jan. 15, 2007, it will be saved in the directory
``/home/media/photos/2007/01/15``. ``/home/media/photos/2007/01/15``.


If you want to retrieve the upload file's on-disk filename, or a URL that refers If you want to retrieve the upload file's on-disk filename, or a URL that refers
to that file, or the file's size, you can use the ``File.name``, ``File.url`` to that file, or the file's size, you can use the
and ``File.size`` attributes; see :ref:`topics-files`. :attr:`~django.core.files.File.name`, :attr:`~django.core.files.File.url`
and :attr:`~django.core.files.File.size` attributes; see :ref:`topics-files`.


Note that whenever you deal with uploaded files, you should pay close attention Note that whenever you deal with uploaded files, you should pay close attention
to where you're uploading them and what type of files they are, to avoid to where you're uploading them and what type of files they are, to avoid
Expand Down Expand Up @@ -581,7 +582,7 @@ image. Has two extra optional arguments:
Name of a model field which will be auto-populated with the height of the Name of a model field which will be auto-populated with the height of the
image each time the model instance is saved. image each time the model instance is saved.


.. attribute:: ImageField.width_field` .. attribute:: ImageField.width_field


Name of a model field which will be auto-populated with the width of the Name of a model field which will be auto-populated with the width of the
image each time the model instance is saved. image each time the model instance is saved.
Expand Down

0 comments on commit bc768e2

Please sign in to comment.